问题描述
我们在写一些基础java代码时时常会在循环中放一个从控制台获取输入的情况,例如:
- 当输入的年龄为负数时抛出异常,再重新输入。
/**
* @author lzp
* @Date 2020年7月25日
*/
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
try {
System.out.println("请输入用户的年龄:");
int age = sc.nextInt();
if(age<0) {
throw new AgeException("年龄不能为负数");
}
System.out.println("您输入的年龄为:"+age);
break;
} catch (AgeException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
//自定义异常
class AgeException extends Exception{
public AgeException() {
super();
}
public AgeException(String message) {
super(message);
}
}
当我们只触发年龄异常时能够正常的进入循环继续输入:
但当我们输入英文字符,触发输入异常时,程序就会陷入输入异常的死循环:
解决问题
经过断点调试猜测,数值型在输入后可能会放在缓存里,就导致值一直为输入的非数字,重复触发输入异常,最好的方法就是把输入改成字符串输入,然后转换为相应类型,这样就OK了。
int age = Integer.parseInt(sc.nextLine());