【问题标题】:Why is my very simple while loop repeating one extra time?为什么我的非常简单的 while 循环会重复一次额外的时间?
【发布时间】:2018-06-20 16:47:12
【问题描述】:

这是我的 while 循环。该程序对整数求和,直到输入负数。此时循环应该中断并且应该打印“再见”。然而,它每次在说再见之前都会添加负数。我不确定这里出了什么问题。请帮忙?!

import java.util.Scanner;

public class While {
    public static void main(String[] args)
    {
        int input = 5;
        int sum = 0;

        while(input >= 0)
        {
            System.out.println("Please enter a positive integer: ");
            Scanner in = new Scanner (System.in);
            input = in.nextInt();
            sum = sum + input;
            System.out.println("Running total: " + sum );
        }

        System.out.println("Goodbye!" );
    }

测试:

Please enter a positive integer: 

5

Running total: 5

Please enter a positive integer: 

10

Running total: 15

Please enter a positive integer: 
-1

Running total: 14

Goodbye!

我不想得到14的返回值,它应该简单地说再见!

【问题讨论】:

  • 如果值为负数,您需要在之前打破循环。
  • 但我不能跳出循环。如果我在循环结束时中断,则不会输入下一个整数。

标签: java loops while-loop extra


【解决方案1】:

您需要使用 break 关键字。您的循环将始终完成,因此只有在您添加负数后才会对 while 进行检查。你可以改成这样:

        while(true)
        {
            System.out.println("Please enter a positive integer: ");
            Scanner in = new Scanner (System.in);
            input = in.nextInt();
            if(input <0){
                break;
            }
            sum = sum + input;
            System.out.println("Running total: " + sum );
        }

或者这个:

while(input >= 0)
            {
                System.out.println("Please enter a positive integer: ");
                Scanner in = new Scanner (System.in);
                input = in.nextInt();
                if(input <0){
                    break;

                    sum = sum + input;
                    System.out.println("Running total: " + sum );
                }
            }

或者在需要时完全避免 if 语句(尽管这不是循环的重点):

while(input >= 0)
                {
                    sum = sum + input;
                    System.out.println("Please enter a positive integer: ");
                    Scanner in = new Scanner (System.in);
                    input = in.nextInt();

                    System.out.println("Running total: " + sum );

                }

【讨论】:

  • 那么如果不使用 if 语句就没有办法完成这项工作吗?我认为 while 循环的重点不是使用 if 语句。如果我想使用 if 语句,我可以完全消除 while 循环。
  • 添加了第三个选项,避免使用 if 语句。然而,while 循环的重点不是避免 if 语句。我想你会发现你需要循环,即使你使用 if 语句
  • 您输入的第三个解决方案不会将整数添加到当前总和中,它只会打印出整数。但是它确实帮助我找到了解决方案:
  • 加法在第三种方案中。循环中的第一行。
【解决方案2】:

这是我的解决方案:

while(input >= 0)
        {
            sum = sum + input;
            System.out.println("Running total: " + sum );
            System.out.println("Please enter a positive integer: ");
            Scanner in = new Scanner (System.in);
            input = in.nextInt();

        }
        System.out.println("Goodbye!" );
    }

通过在初始化时和输入第一个整​​数之前计算总和。它似乎按照我现在想要的方式工作。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 2021-05-29
    • 2021-08-17
    • 1970-01-01
    • 2012-10-01
    • 2012-11-07
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多