在使用nextInt()获取键盘输入值时,若输入不是int类型的值时会报异常,如果进行异常 try{ 异常语句 }catch{ 进入下次循环 }会自动获取上一次输入的值进行判断,从而导致无限循环运行catch子句。
解决方法:
1.在catch子句中加一个next()方法。当获取的不是int类型字符时便会走catch子句。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = 0;
String b;
while (true) {
try {
a = scanner.nextInt();
System.out.println("try" + a);
} catch (Exception e) {
b = scanner.next();
System.out.println("---" + b);
}
}
}
相当于进行if(){ }else判断一样。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = 0;
String b;
while (true) {
if (scanner.hasNextInt()){
a=scanner.nextInt();
System.out.println("try"+a);
}else{
b=scanner.next();
System.out.println("---"+b);}
}
}
运行结果如图:
2.将Scanner对象声明在while循环内。就可以每次都重新获取一个新的输入值。
public static void main(String[] args) {
int a = 0;
String b;
while (true) {
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()){
a=scanner.nextInt();
System.out.println("try"+a);
}else{
System.out.println("---");}
}
}
运行结果如图: