public class TestInput {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
int num = 0;
while (true) {
Scanner input = new Scanner(System.in);
if (input.hasNextInt()) {
num = input.nextInt();
break;
} else {
System.out.println("你的输入有误,请重新输入一个整数:");
}
}
System.out.println(num);
}
}
请输入一个整数:
0.3
你的输入有误,请重新输入一个整数:
sdad
你的输入有误,请重新输入一个整数:
sdadadade
你的输入有误,请重新输入一个整数:
.;'
你的输入有误,请重新输入一个整数:
1.23.
你的输入有误,请重新输入一个整数:
2
2
最近java输入的时候,经常碰到输入不合理引发的潜在bug,于是写了一个检测java输入是否合法的方法;其他类型输入应该类似。不清楚为什么每次都要在while循环中每次都要new一个scanner类。。但是不这样就一直循环“请重新输入一个整数”。。。
在一番探索后,并且看到了一位大佬的博客,获得了些许启发,
Java中Scanner用法总结_Megustas_JJC的博客-CSDN博客_java scanner
可能像大佬所写,输出完的回车键,被next()收留了下来,所以导致了后边的结果,于是我对我的代码做了修改。
public class TestInput {
public static void main(String[] args) {
int[] a = new int[5];
System.out.println("请输入一个整数:");
Scanner input = new Scanner(System.in);
for (int i = 0; i < a.length; i++) {
if (input.hasNextInt()) {
a[i] = input.nextInt();
// break;
} else {
System.out.println("你的输入有误,请重新输入一个整数:");
String string = input.next();
i--;
}
}
System.out.println(Arrays.toString(a));
}
}
经测试,这段代码不会出现任何问题,并且将new scanner 也放到了循环体外边,在用debug调试的过程中我发现 了每次输出的“你的输出有误。。。。”这一句话,像一个孤儿一样没人收留,到了后边的循环貌似是被后来的if (input.hasNextInt())判断为不符合条件还是怎么样?于是又在输出else循环体。所以使用了一个input.next()将这句话装进去,让这个孤儿有了家。所以后边的循环变得正常了。
版权声明:本文为weixin_42051673原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。