所以我试图阻止一个错误发生,如果用户输入1,2,3以外的数字,所以我创建了一个while循环,让程序不断询问用户一个新的数字,如果他们的输入在外面1,2,3。 在我没有
之前 Scanner user1 = new Scanner(System.in);
input = user1.nextInt();
行,while循环保持无限运行。但是现在代码做了我想要的,它停止并评估新用户输入多次输入错误(我在正确的一个之前输入了3,6,7个错误的值,并且每次都有效) 。
我的问题是,扫描仪如何阻止无限循环?扫描仪实现是否会导致计算机在继续之前等待用户输入,因此它会继续对其进行持续评估,而不是无限制地打印出来"我很抱歉这样做不是有效的输入..." ?我只是想确定我知道为什么它会停止。
Scanner user = new Scanner(System.in);
System.out.println("Hello, what would you like to do?" + "\n" + "1. Search" + "\n" + "2. Add new instructor" + "\n" + "3. Remove Intsructor");
int input = user.nextInt();
boolean valid = false;
while(valid == false)
{
if(input<3 && input>=1)
{
valid = true;
}
else
{
System.out.println("I'm sorry, that's not a valid input, please enter 1, 2, or 3.");
Scanner user1 = new Scanner(System.in);
input = user1.nextInt();
}
答案 0 :(得分:0)
它通过等待来停止循环。 nextInt()
是一种阻塞方法,这意味着当你调用它时,调用它的线程将等到该方法返回一个值,或者块的原因已经完成。
当你调用nextInt()时,你的线程会受到攻击,并等待System.in
的某些事情发生。一旦有东西进入,该方法返回值。
如果你把scanner.nextInt()
放在你的循环中,那么每个循环迭代将等待用户输入
Scanner scanner = new Scanner(System.in);
boolean valid = true;
while(valid) {
switch(scanner.nextInt()) {
case 1:
case 2:
valid = false; //if nextInt() is 1 or 2
break;
default: //anything else
break;
}
}
答案 1 :(得分:0)
考虑一下:
valid
设置为true
valid
为1或2 时,true
才设为input
input
超出有效范围,则valid
不会更改input
在第一次进入循环时超出范围,则停止循环的唯一方法是更改input
的值。没有您添加的两行,即没有
Scanner user1 = new Scanner(System.in);
input = user1.nextInt();
循环不会改变input
。因此,如果循环没有立即退出,它将保持无限。
请注意,您无需创建新的扫描仪 - 您可以从循环之前创建的扫描仪中读取,即
input = user.nextInt();
另请注意,在不调用nextInt()
的情况下调用hasNextInt()
可能会产生异常。