我的代码遇到了一些麻烦:
int item = -1;
Scanner input = new Scanner(System.in);
do {
while (!input.hasNextInt() || input.nextInt() > 5) {
System.out.println("Enter a valid integer!");
getMenu();
input.next();
}
item = input.nextInt();
} while (item <= 0);
input.close();
如果我输入的数字低于5,那就有效。如果我输入6,它表明我必须输入一个有效的整数。当我再次尝试输入6时没有任何反应,但是当我再次输入6时,它会再次显示该消息。我认为这与input.next()
有关,但不太确定原因。
有什么想法吗?
getMenu()
只显示一串字符串btw。
换句话说。用户必须输入1到5之间的有效整数。如果用户不这样做,他将遍历要求输入有效整数的代码块。用户将循环,直到他输入有效的整数。
答案 0 :(得分:1)
如果您输入while
,则会在value > 5
循环中阅读2个输入。第一个值由scan.nextInt()
本身读取。然后循环内的scan.next()
也会读取一个标记。
因此,第一次通过6
时,while
循环条件将得到满足,然后scan.next()
将等待输入。然后,6
读取您第二次传递scan.next()
。
此外,您无法从循环中删除scan.next()
,因为如果scan.hasNextInt()
条件变为false
,则scan.nextInt()
将无法读取输入,然后你的循环将变为无限,因为hasNextInt()
将继续测试相同的输入。
要解决此问题,请从while
循环中删除第二个条件:
int item = -1;
Scanner input = new Scanner(System.in);
do {
System.out.println("Enter integer value between [1,5]");
while (!input.hasNextInt()) { // iterate until invalid input is passed
System.out.println("Enter a valid integer!");
input.next(); // Read the invalid input to move the cursor ahead
}
item = input.nextInt(); // Valid input found, read it in `item`
} while (item <= 0 || item >= 6);
System.out.println(item);
input.close();
答案 1 :(得分:1)
在执行块或 flush()内声明扫描程序或使用 nextLine()冲洗它
do {
Scanner input = new Scanner(System.in);
while (!input.hasNextInt() || input.nextInt() > 5) {
System.out.println("Enter a valid integer!");
//OR String a = input.nextLine():
getMenu();
input.next();
}