繁体   English   中英

在while循环中重用扫描器输入以用于多种条件

[英]Reusing scanner input for multiple conditions in while loop

我想将单个扫描器输入用作while循环中的多个条件,在where循环中可以检查输入是否正确以及是否不正确以重新输入输入值。

像这样:

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)  {

}

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

调用scanner.nextInt()提高扫描器读取其输入的位置,因此第二次读取可能会产生不同的数字,或者在只有一个int可用时抛出异常。 要解决这种情况,您可以引入一个变量来保存第二次检查的值:

int tmp;
while (scaner.hasNextInt() && (tmp = scaner.nextInt()) > 0 && tmp < 10)  {
    ...
}

第二(tmp = scaner.nextInt())表达式(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);

试试这个代码:

int s;
while (scanner.hasNext() && (s = scanner.nextInt()) >0 && s <0){
 #code          
}

您在这里有一些选择。

  1. 您可以将一个if条件放在while内,然后给while一个true作为条件..让if语句中断while循环
  2. 您可以编写一个方法进行检查,然后将scanner.nextInt()作为参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM