2017-08-31 11 views
2

私のコードでは、ループ内の数字を一緒に追加しようとしています。数字を入力すると、前の数字に加算され、 。私は正常に動作していますが、プログラムを終了する0を入力すると、最後の合計が何であってもメッセージが表示され、プログラムが再起動され、終了できないようです。私の仕事を得るために使っているウェブサイトはこちらですfrom。私はここで、運動26Java True While文が壊れてしまったときに繰り返す

の午前私のコードです:

package July28Restart; 

import java.util.Scanner; 

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

     int sum = 0; 
     while (true){ 

      System.out.println("Enter numbers one by one, and continue entering them. The system will continue adding them together with the last sum. When you enter 0, the last sum will be the last."); 
      int read = Integer.parseInt(reader.nextLine()); 

      if (read == 0){ 
       break; 
      } else if (read != 0){ 
       while (true){ 
        sum = sum + read; 
        System.out.println("Sum now: " +sum); 
        read = Integer.parseInt(reader.nextLine()); 
        if (read == 0) { 
         System.out.println("The sum in the end was: "+sum); 
         break;    
        } 
       } 
      } 
     } 
    } 
} 

すべてのヘルプははるかに高く評価されるだろう。

+0

デバッガでそのコードを実行しようとしましたか? https://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems – litelite

+0

いいえ、私はそれを行う方法がわかりません、 –

+1

@JayMueller停止し、IDEデバッガの使用方法を学んでください。これは、プログラミングを行うために必要な基本的なスキルです。 –

答えて

2

あなただけの内側のループ内から外側のループを破るためにラベルを使用することができます。

outer: 
while (true){ 
    // ... 
    while (true){ 
     // ... 
     if (read == 0) { 
      System.out.println("The sum in the end was: "+sum); 
      break outer;    
     } 
    } 
    // ... 
} 
2

あなたは別の番号を入力した後に0を入力した場合、あなたは(直接、別の後)二回0を入力した場合にのみ、最初の、そしてあなたが

修正したコード終了しますするために第2のループから壊れるので:

package July28Restart; 
import java.util.Scanner; 

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

     int sum = 0; 
     while (true) { 

      System.out.println(
        "Enter numbers one by one, and continue entering them. The system will continue adding them together with the last sum. When you enter 0, the last sum will be the last."); 
      int read = Integer.parseInt(reader.nextLine()); 

      if (read == 0) { 
       exitProgram(sum); 
      } else if (read != 0) { 
       while (true) { 
        sum = sum + read; 
        System.out.println("Sum now: " + sum); 
        read = Integer.parseInt(reader.nextLine()); 
        if (read == 0) { 
         exitProgram(sum); 
        } 

       } 

      } 

     } 

    } 

    private static void exitProgram(int sum) { 
     System.out.println("The sum in the end was: " + sum); 
     System.exit(0); 

    } 

} 
+1

'System.exit'は使わないでください。再利用性とコードの拡張に重大な制限があります。また、あなたのループを制御するために 'boolean'値を使用しないでください。これはラベルのためのものです。外側のループの前に' outer: 'を追加し、' return; 'を' return outer; 'に変更してください。 1つの余分なコード行で作業が完了しました。 –

+0

私はコードを最適化したくないので、TOが自分のコードを認識し、コードの変更を見ます。しかし実際のプロジェクトでは、あなたのコメントは絶対に有効で役立ちます。 –

2

申し訳ありませんが、ちょうどあなたの質問を見ました。 Jaroslaw Pawlakが説明したように、ここで外側を使うこともできますし、リファクタリングして使用することもできます。何かは次のようになります:

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

    } 

    public static void calSum(Scanner reader) { 
     System.out.println("Enter numbers one by one, and continue entering them. The system will continue adding them together with the last sum. When you enter 0, the last sum will be the last."); 
     int sum = 0; 
     while (true){ 
      int read = Integer.parseInt(reader.nextLine()); 
      if(read != 0) { 
       sum = sum + read; 
       System.out.println("Sum now: " +sum); 
      } else { 
       break; 
      } 
     } 
     System.out.println("The sum in the end was: " + sum); 
    } 
} 
関連する問題