我想在while循环中使用单个扫描仪输入作为多个条件,其中可以检查输入是否正确以及重新输入输入值是否正确。
这样的事情:
while(scannerInput is a int AND scannerInput is > than 0 AND scannerInput is < 10)
{
//CODE
}
但如果我使用scanner.hasNextInt()和scanner.nextInt(),它会提示我输入而不是使用相同的
while (scaner.hasNextInt() && scaner.nextInt() > 0 && scaner.nextInt() < 10) {
}
有没有办法存储第一个输入并一次又一次地重复使用,还是有更好的解决方案来解决我的问题?
答案 0 :(得分:2)
scanner.nextInt()
的调用会提升扫描程序读取其输入的位置,因此第二次读取可能会生成不同的数字,或者在只有一个int
可用时抛出异常。要解决这种情况,您可以引入一个变量来保存第二次检查的值:
int tmp;
while (scaner.hasNextInt() && (tmp = scaner.nextInt()) > 0 && tmp < 10) {
...
}
第二个子表达式(tmp = scaner.nextInt())
从scanner
读取下一个整数值,并将其存储在临时变量tmp
中。之后,将该值与零进行比较,最后将相同的值与10进行比较。
分配是在tmp < 10
检查之前执行的,因为部分&&
表达式按从左到右的顺序处理。
此解决方案并不理想,因为tmp
在循环后仍然可见,并且因为它不那么容易阅读。你最好在循环中移动支票,如下所示:
while (scaner.hasNextInt()) {
int val = scaner.nextInt();
if (val < 0 || val >= 10) {
break;
}
...
}
我的想法是在正确的
之前一直提示您输入新输入的代码
实现此目标的常用方法是使用do
/ while
循环:
int val = -1;
do {
System.out.print("Enter an int: ");
if (scanner.hasNextInt()) {
val = scanner.nextInt();
} else {
scanner.nextLine();
}
} while (val < 0 || val >= 10);
答案 1 :(得分:0)
试试这段代码:
int s;
while (scanner.hasNext() && (s = scanner.nextInt()) >0 && s <0){
#code
}
答案 2 :(得分:0)
你有一些选择。