0

我对编程和在我的 Uni 中使用 Java 101 完全陌生,并且已经与这个问题作斗争了一个小时,在网上搜索并且不明白出了什么问题。

所以练习是编写一个程序来提示数字,读取它们并将它们求和,直到用户输入一个 0 并且程序终止。我的问题是我的程序忽略了我输入的第一个数字,我总是要输入两次。似乎循环是问题,但我怎么知道?到目前为止,这是我的代码:

import java.util.Scanner;

public class SumOfMultipleNumbers {

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

        while (true) {
            int read = Integer.parseInt(reader.nextLine());
            if (read == 0) {
                break;
            }

            read = Integer.parseInt(reader.nextLine());
            sum += read;

            System.out.println("Sum now: " + sum);
        }

        System.out.println("Sum in the end: " + sum);
    }
}

那么如何更正我的代码,以便每次输入数字而不是第二次时它都会添加到总和中?

4

4 回答 4

1

你在打电话

read = Integer.parseInt(reader.nextLine());

每个循环两次

当你宣布一次read

int read = Integer.parseInt(reader.nextLine());

然后再一次,在你检查为零之后

read = Integer.parseInt(reader.nextLine());

你只需要做一次


您可能想要使用的是do while循环

do
{
    // read variable in
    // print for sum
}while(variableReadIn != 0);
于 2013-11-04T15:10:50.527 回答
1

那是因为您在检查零输入后读取了一个新行。

while (true) {
    int read = Integer.parseInt(reader.nextLine());
    if (read == 0) {
        break;
    }

    // this is not needed: read = Integer.parseInt(reader.nextLine());
    sum += read;
于 2013-11-04T15:11:41.167 回答
0

您在reader.nextLine()循环开始时调用,目的是确定是否应该中断循环,然后再次执行以获取实际数字的总和。这就是您的代码第一次忽略输入值的原因。

您要做的就是reader.nextLine()只调用一次,然后检查退出条件的值。我可能会做这样的事情:

while (true) {
    String inputText = reader.nextLine();

    if(inputText.equals("0")){
        break;
    }

    int read = Integer.parseInt(inputText);
    sum += read;

    System.out.println("Sum now: " + sum);

}
于 2013-11-04T15:16:22.970 回答
0

每次调用reader.nextLine()从 Scanner 读取的新行时,在检查零并将其添加到总和之前调用此函数。

最好不要只使用while(true)循环,而是应该使用带有类似条件的循环while(read != 0)

最后,您应该关闭扫描程序以防止损坏。在这个程序中它不会造成太大的伤害,但这并不意味着你可以忘记它。

import java.util.Scanner;

public class SumOfMultipleNumbers {

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

        int sum = 0;

        int read;

        do {
            sum += read;

            System.out.println("Sum now: " + sum);

            read = Integer.parseInt(reader.nextLine());
        } while (read != 0)

        System.out.println("Sum in the end: " + sum);

        reader.close();
    }
}
于 2013-11-04T15:21:01.510 回答