我尝试使用 do-while 循环来获取 ArrayList
的信息,但我得到以下输出:
Please input your number (type a letter to finish): 2
3
Please input your number (type a letter to finish): 4
Please input your number (type a letter to finish): q
但是操作成功,并且 ArrayList
按预期包含所有三个数字 (2, 3, 4),即使没有为其中一个打印提示
do {
num = getNumber("Please input your number (type a letter to finish): ");
data.add(num);
} while (console.hasNextInt());
和方法getNumber
:
public static int getNumber(String prompt) {
System.out.print(prompt);
return console.nextInt();
}
如何让它打印所有数字的提示?
最佳答案
您的主要问题是在 hasNextInt()
之前调用 nextInt()
。
您需要执行other way around .
通常,nextInt()
只是消耗使用 hasNextInt()
等待的数据,但如果通过这种方式没有收到数据,nextInt()
本身会阻塞。这就是导致您出现问题的原因。
查看程序的控制流程:
getNumber
被调用- 打印
提示
nextInt()
输入 block- 给出输入并返回
getNumber
在 do-while 循环中,
hasNextInt()
block 用于输入问题来了,你的程序再次等待输入,但没有机会打印新的提示!
- 在下一次迭代中,
nextInt()
仅消耗在步骤 5 中等待的int
- 现在
hasNextInt()
之前nextInt()
的通常模式已恢复,因此您的程序从此时起将按预期运行上
关于用于 ArrayList 数据的 Java 扫描器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726583/