2016-11-12 3 views
-2

ファイルから整数リストを読み込み、累積合計を実行するプログラムを作成しようとしています。いずれかの時点で、合計が負の数になると、プログラムは停止し、合計が負になるまでに要したステップの数をリストします。合計が正の場合、Javaの累積合計プログラムはNoSuchElementをスローします

私が問題を抱えているのは、合計が負にならないリストがある場合だけです。プログラムは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

すべてのループで 'negative = true'を設定しています。最後の値だけが重要です。 –

+0

これ以上データがなくても、スキャナを読み続けることができます。 –

答えて

2

読み取る前にスキャナに入力があるかどうかを確認する必要があります。そうでない場合はinput.nextInt()が例外をスローします。

これを行うには、スキャナでhasNextInt()メソッドを呼び出す必要があります。読み取る整数があるかどうかによって、trueまたはfalseが返されます。あなたのケースでは

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

、あなたはあなたの中の状態にそれを追加することもでき、すなわち

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

読むために残された番号が存在しない場合、これは実行がループ本体を防ぐことができます。

詳細については、official documentation for the Scanner classをご覧ください。