【问题标题】:While Loop Continues Despite Condition Being Met尽管满足条件,循环仍继续
【发布时间】:2012-09-16 08:40:41
【问题描述】:

大家好,所以我一直在尝试为我的 CS 课编写一个非常简单的计数程序,但由于某种原因,它一直吐出“请输入一个数字(0 停止):”提示和似乎完全忽略了while循环。如果满足while循环内部的条件,为什么即使输入0,while循环也不会停止?我过去做过 C#,但我对 Java 的警告不是很熟悉,所以如果 Java 不喜欢我做任何奇怪的事情,请告诉我。对于程序的更详细的描述,它应该从用户那里读取负数和正数,分别输出负数和正数的总和,然后取平均值。 (显然,下面只是有问题的一段代码。)

 Scanner scanner = new Scanner(System.in);
    double average;
    double numPositive=0.0;
    double numNegative=0.0;
    double input = 0.0;
    do 
    {
        System.out.print("Please enter a number (0 to stop): ");
            input = scanner.nextDouble();   
        if (input < 0.0)
        {
            numNegative += scanner.nextDouble();

        }
        else if (input > 0.0)
        {
            numPositive += scanner.nextDouble();

        }

    } while (Math.abs(input) > 1.0e-6);  // make the tolerance whatever you want.

【问题讨论】:

  • 一个建议:如果在某些时候你认为“程序不遵循逻辑或者我在实现逻辑时犯了一些错误”,后一个答案通常是正确的。

标签: java loops while-loop


【解决方案1】:

在初始分配后您永远不会更改input;循环将永远持续下去。我想你又忘了给scanner.nextDouble()打电话了。

【讨论】:

  • DavisB 的回答比较好;如果他添加另一个scanner.nextDouble,那么只有奇数输入将作为循环的控制,偶数输入将被处理,这将是相当奇怪/复杂的。
【解决方案2】:

在最初检索到 input 之后,您没有接收它。

您的 scanner.nextDouble() 分配给 numNegativenumPositive - while 循环不会检查这两者。

while (input != 0.0)
    {
        System.out.print("Please enter a number (0 to stop): ");
        input = scanner.nextDouble();

        if (input < 0.0)
        {
            numNegative += input;

        }
        else if (input > 0.0)
        {
            numPositive += input;

        }

    }

【讨论】:

  • @duffymo 去吧。你有我的明确许可编辑我的帖子。
  • 我不需要权限;这是我逃避的动力。
  • @duffymo 我知道,这是一个响亮的 meh。
【解决方案3】:

您没有在循环内的任何地方为input 赋值。所以,初始值保持不变,循环不会退出。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2017-02-03
    • 2020-05-18
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多