【问题标题】:How to get the hasNext() loop to stop when there is no input left? [duplicate]当没有输入时如何让 hasNext() 循环停止? [复制]
【发布时间】:2021-06-19 11:45:12
【问题描述】:

我有这个代码:

public class SimpleTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter: ");

        String s = "";
        while (scanner.hasNext())  {
            s += scanner.next();
            System.out.println(s);
        }

        System.out.println("Result: " + s);
    }
}

我的代码显示:

虽然Result: 行永远不会被打印出来。

我该如何解决? (不使用scanner.nextLine.split() 或不同的while 条件,如whle (!input.equals("quit"))

【问题讨论】:

  • 我认为你不能使用System.in 而不做一些非常奇怪的事情,比如关闭System.in 流(我认为这会非常糟糕)。来自系统的数据是用户输入的数据,通常你告诉他们输入五件事(或任何数字),然后收集那么多并继续而不检查“更多”。
  • P.S. nextLine() 正是我在这种情况下的建议。为什么不想使用它?
  • 您可以在最后一个数字之后输入 EOF 来表示“这里没有更多数据”。 (在 linux 上是 Ctrl+D,我相信在 Windows 上是 Ctrl+Z)

标签: java


【解决方案1】:

扫描文件时,扫描器最终会到达流标记的末尾,因此它知道没有更多数据要扫描,因此 hasNext() 返回 false。但是,当从命令行扫描时,没有结束流标记,因此 hasNext() 阻塞等待下一个数据块(或流结束标记)。

您需要决定如何结束命令行输入,例如是输入特定数量的项目还是将您的输入放在特定的击键/关键字后,例如 END、EOF、STOP 等。然后您需要添加为您的 while 循环编写代码以查找输入标记的结尾并退出循环。

【讨论】:

  • 您也可以在命令行上使用 EOL 标记,例如。在 linux 你可以做Ctrl+D
猜你喜欢
  • 2022-11-25
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多