java Scanner中一个问题 5
先看下面两段代码packagecom.j2se.jaa01;importjava.util.Scanner;publicclassTestScanner{publicst...
先看下面两段代码
package com.j2se.jaa01;
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入字符串:");
String line = sc.nextLine();
if("exit".equals(line)){
break;
}System.out.println(">>>>"+line);
}
}
}
==============================================================
import java.util.*;
public class SwitchCaseDemo {
public static void main(String[] args) {
int score;
Scanner console = new Scanner(System.in);
boolean isInt=true;
while(true) {
try {
score = console.nextInt();
}
catch (InputMismatchException e) {
isInt=false;
System.out.println("格式不正确,从新再输入:");
}
if(true ==isInt)
break;
}
}
}
=====================================================
第二段代码如果输入一个字母就会死循环报错,解决方法是将Scanner初始化放到while循环中,如果不放的话第二段代码中的变量score就不会发生变化。(不知道我解释的对不对)
问题是看第一段代码,Scanner初始化也没放到while里啊,但变量line就会变
总之这里面太乱了,初学求大神指导下 展开
package com.j2se.jaa01;
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入字符串:");
String line = sc.nextLine();
if("exit".equals(line)){
break;
}System.out.println(">>>>"+line);
}
}
}
==============================================================
import java.util.*;
public class SwitchCaseDemo {
public static void main(String[] args) {
int score;
Scanner console = new Scanner(System.in);
boolean isInt=true;
while(true) {
try {
score = console.nextInt();
}
catch (InputMismatchException e) {
isInt=false;
System.out.println("格式不正确,从新再输入:");
}
if(true ==isInt)
break;
}
}
}
=====================================================
第二段代码如果输入一个字母就会死循环报错,解决方法是将Scanner初始化放到while循环中,如果不放的话第二段代码中的变量score就不会发生变化。(不知道我解释的对不对)
问题是看第一段代码,Scanner初始化也没放到while里啊,但变量line就会变
总之这里面太乱了,初学求大神指导下 展开
1个回答
展开全部
你这段代码是需要完成什么功能,而且也没错啊,isInt开始赋值是true,当输入字符就会异常,isInt就为false,然后这个wile循环的唯一出口就没了,如果不是,就只循环一次
追问
第二段代码,如果输入字符,就会出现死循环报错,就是一直输出那个异常,就不会有重新输入这个阶段了。我把Scanner =new这段放到while里面就不会了。
关键是这个原理好像是如果不经过new的话,score就一直是个字符,不会再有机会重新输入,但第一段代码new也在外面,还是可以重新输入修改line的值
追答
这个要从scanner的原理说了,scanner在要求用户输入的时候,其实是在内存中占用一段内存用于用户输入,你这里,这段内存能存储int类型的数据,而其他类型的就会抛出异常,然而,我们用sc.nextInt()调用没把该段内存中的东西提出来,因为现在存入的是字符,提取不出来,他就会一直占用这段内存,导致我们二次输入时,就不会再要求用户输入了,他会继续试图调用该段内存数值,也就一直报错
你通过new 是重新生成一个scanner对象,所有都初始化了的,所以才能再次输入,但是每次在调用这个方法时都会new 一个scanner对象,会占用我们的内存,所以并不好
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询