我正在尝试编写一个程序,它将从文件中读取整数列表,并执行累积求和。如果在任何时候,总和变为负数,则程序将停止并列出在总和变为负数之前所花费的步数。
我遇到麻烦的唯一部分是当你有一个列表,其中总和永远不会变为负数。该程序将抛出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”将抛出异常。
答案 0 :(得分:2)
您需要在阅读之前检查您的扫描仪是否有输入,否则input.nextInt()
会抛出异常。
要执行此操作,您需要在扫描仪上调用hasNextInt()
方法,该方法将返回true
或false
,具体取决于是否有可读取的整数。
if (scanner.hasNextInt()) {
scanner.nextInt();
}
在您的情况下,您可能希望将其添加到您的while条件,即
while (sum > 0 && input.hasNextInt())
如果没有数字可供阅读,这将阻止循环体执行。
有关详细信息,请查看official documentation for the Scanner class。