【问题标题】:While loop wont stop running虽然循环不会停止运行
【发布时间】:2017-03-16 21:48:19
【问题描述】:

我有一个 while 循环,它应该在没有更多整数要读取时结束。出于某种原因,它会继续检查(或者至少我相信如此)并且不会返回打印语句。我的示例输入看起来像,

20 21 22 23

我在hasNextInt() 之前尝试过hasNextLine(),尝试/最终阻止并关闭扫描仪以及阅读论坛。

如果我对问题的措辞/格式有误,或者我还没有遇到其他资源,我将不胜感激。我真的只是想学习。

public static void main(String[] args) {
    x = 0;
    in = new Scanner(System.in);

    while (in.hasNextInt()) {
        x = in.nextInt();
        reverse(x);
        beautiful(x, reverse(x), y);
    }

    printCount(count);
}

【问题讨论】:

  • 当您从标准输入读取输入时,输入永远不会结束(扫描器总是等待输入新的输入)。您应该需要输入一些特殊输入才能退出循环。
  • 添加非整数值会中断循环,例如 20 21 22 23 A .

标签: java while-loop java.util.scanner


【解决方案1】:

in.hasNextInt() 连续读取数据。所以你应该使用 break;在您的要求完成后以适当的条件停止此操作。

【讨论】:

    【解决方案2】:

    在这几行之后

        while (in.hasNextInt()) {
            x = in.nextInt();
    

    插入一行

            if (x == 0) break;
    

    输入0 后循环将停止 - 当然,您可以选择另一个停止数字,即。 e. -1.

    【讨论】:

    • 请考虑接受并支持对您有用的答案。
    【解决方案3】:

    我认为有很多方法可以解决这个问题,但我想到了这个:

    1. 创建第二个扫描仪并将您的第一个扫描仪输入传递给它new Scanner(in.nextLine());
    2. 创建一个while 循环,直到没有数字为止。 sc.hasNextInt()

    【讨论】:

      【解决方案4】:

      您的输入应该以某种方式终止。 1 2 3 4 和 1 2 3 4 5 都是有效输入,因为扫描仪无法自行决定在哪里结束。可以假设数字序列在windows上以EOF字符Ctrl-Z结束,在unix上以Ctrl-D结束。

      有关此问题的更多帮助,请查看link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 2013-03-25
        • 1970-01-01
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多