关于利用input.hasNextInt()的重新输入的Bug分析和可行性提供
今天做作业时遇到一个功能需求:输入的内容为非数字时控制台提示信息并重新输入
本来准备用pattern方法写,但是出于偷懒的心理(少些两句少动点脑子)于是用了从网上找来的hasNextInt()嵌入while()的方法,然后发现……好像自己挖了个坑跳了进去……
int a=0;
while (!input.hasNextInt()) {
a=input.nextInt();
}
System.out.println(a);
这里的输入没有传到a里
因为while的执行条件是【输入的值为非int类型】,合法输入时【!input.hasNextInt()】的结果为false,循环结束,
输入非法字符时,【!input.hasNextInt()】的 值为true,把值传进a然后继续循环,但是传的值为非int类型,所以由控制台来报错
int a=0;
while (input.hasNextInt()) {
a=input.nextInt();
}
System.out.println(a);
既然【!input.hasNextInt()】的判断条件无法传值,那么就改成【input.hasNextInt()】,测试结果如下:
输入非法字符时【input.hasNextInt()】为false,结束循环,但是input.hasNextInt()判断输入为非数字所以没有进行传值操作,k依然是0
输入合法值根据while的判断条件是个无限循环,每次循环都会把当前输入合法值传进a,当输入非法值时循环结束
经过了相当一段时间段的尝试,这里就不一一说了,最后解决了这个问题
我依稀记得我的本意是偷懒来着?
Scanner input = new Scanner(System.in);
// **input.hasNextInt()循环输入测试
int a = 0;
boolean flag = true;
while (flag) {
try {
input = new Scanner(System.in);
flag = !input.hasNextInt(); // 正确输入跳出循环条件
a = input.nextInt();
} catch (Exception e) { // TODO: handle exception
System.out.println("输入错误请重新输入:");
input.nextLine(); //
}
}
System.out.println(a);
下面是测试结果
错误输入:
正确输入: