在while循环中重复使用扫描仪输入来处理多个条件

时间:2014-08-25 11:32:48

标签: java

我想在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)  {

}

有没有办法存储第一个输入并一次又一次地重复使用,还是有更好的解决方案来解决我的问题?

3 个答案:

答案 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)

你有一些选择。

  1. 你可以在while中放入一个if条件,并将true作为条件赋予..让if语句打破while循环
  2. 您可以编写一个方法来执行检查并将scanner.nextInt()作为参数