如果sum为正数,则Java累积和程序会抛出NoSuchElement

时间:2016-11-12 00:57:51

标签: java

我正在尝试编写一个程序,它将从文件中读取整数列表,并执行累积求和。如果在任何时候,总和变为负数,则程序将停止并列出在总和变为负数之前所花费的步数。

我遇到麻烦的唯一部分是当你有一个列表,其中总和永远不会变为负数。该程序将抛出NoSuchElementException。我已经尝试放置在不同位置更新布尔值的if语句,以及编写此程序的其他一些方法,但仍然无法使其工作。任何建议表示赞赏。

public static boolean negativeSum(Scanner input)
{
    boolean negative = true;
    int sum = 0;
    int counter = 0;
    while(sum >= 0)
    {
        int inputNumber = input.nextInt();
        counter++;
        sum += inputNumber;
        if(sum < 0)
        {
            System.out.println(sum + " after " + counter + " steps");
            negative = true;
        }   

        else
        {
            negative = false;
        }
    }

    if(negative == false)
    {
        System.out.println("no negative sum");
    }

    return negative;
}

例如,列表“3 5 5 7 5 -70”将打印6个步骤后总和为-45。但是列表“1 4 3 5 -6 9 8 6”将抛出异常。

1 个答案:

答案 0 :(得分:2)

您需要在阅读之前检查您的扫描仪是否有输入,否则input.nextInt()会抛出异常。

要执行此操作,您需要在扫描仪上调用hasNextInt()方法,该方法将返回truefalse,具体取决于是否有可读取的整数。

if (scanner.hasNextInt()) {
    scanner.nextInt();
}

在您的情况下,您可能希望将其添加到您的while条件,即

while (sum > 0 && input.hasNextInt())

如果没有数字可供阅读,这将阻止循环体执行。

有关详细信息,请查看official documentation for the Scanner class