用于 ArrayList 数据的 Java 扫描器

标签 java java.util.scanner

我尝试使用 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() 本身会阻塞。这就是导致您出现问题的原因。

查看程序的控制流程:

  1. getNumber 被调用
  2. 打印提示
  3. nextInt() 输入 block
  4. 给出输入并返回getNumber
  5. 在 do-while 循环中,hasNextInt() block 用于输入

    问题来了,你的程序再次等待输入,但没有机会打印新的提示!

  6. 在下一次迭代中,nextInt() 仅消耗在步骤 5 中等待的 int
  7. 现在 hasNextInt() 之前 nextInt() 的通常模式已恢复,因此您的程序从此时起将按预期运行上

关于用于 ArrayList 数据的 Java 扫描器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726583/

相关文章:

Java - 从文本文件中读取 double 值

java - 用扫描仪读取输入然后打印显示不同的字符

java - Clojure 能否从现有流程中捕获标准?

java - KeyEvent 没有触发?

java - 如何通过逐行读取文件来获取上一行

java - 如何在这段代码中优化使用 Java.util.Scanner 读取变量?

java - super.input1 = input.nextInt();

java - Spring-Hibernate 事务只读传播

java - 在Java中,对字符串的只读访问是否需要同步?

java - 包 org.springframework.cloud.netflix.zuul 不存在