2017-01-01 18 views
0

私は現在プロジェクトに取り組んでいます。このステップでは数字を求めるプログラムを書くように求められました。 "-1"を入力すると、-1以外のすべての数字の合計が計算されます。私は単にループの後に+1を追加することでこれを修正しましたが、それを実行する別の「適切な」方法があることを確信しています。sum ++を使わずに合計を正しく計算するにはどうすればいいですか?

何か助けていただければ幸いです。 (注:してくださいELI5ので、私は一週間の周りには、Javaを学習してきた)

public static void main(String[] args) { 
      // program in this project exercises 36.1-36.5 
      // actually this is just one program that is split in many parts 

      Scanner reader = new Scanner(System.in); 

      int numbertyped = 0; 
      int sum = 0; 

      System.out.println("Type numbers: "); 

      while (numbertyped != -1) { 

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

       sum = sum + numbertyped; 

      } 
      sum++; 
      System.out.println("Thank you and see you later!"); 
      System.out.println("The sum is " + sum); 

EDIT:私のプログラムが完了しました。私はwhileループでブレークを追加し、残りの機能を追加したソリューションを使用しました。これは最終的な製品です:(コードを改善する方法や、より効率的にする方法についてのヒントがあれば!)

import java.util.Scanner; 

    public class LoopsEndingRemembering { 

     public static void main(String[] args) { 
      // program in this project exercises 36.1-3 


     // actually this is just one program that is split in many parts 

     Scanner reader = new Scanner(System.in); 

     int numbertyped = 0; 
     int sum = 0; 
     int howmany = 0; 
     int evencounter = 0; 
     int oddcounter = 0; 

     System.out.println("Type numbers: "); 

     while (true) { 

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

      if (numbertyped == -1) 
      { 
       break; 
      } 

      if (numbertyped % 2 == 0) 

      { 
       evencounter++; 
      } 

      else 

      { 
       oddcounter++; 
      } 

      sum = sum + numbertyped; 
      howmany++; 

     } 

     double average = (double) sum/howmany; 

     System.out.println("Thank you and see you later!"); 
     System.out.println("The sum is " + sum); 
     System.out.println("How many numbers: " + howmany); 
     System.out.println("Average: " + average); 
     System.out.println("Even numbers: " + evencounter); 
     System.out.println("Odd numbers: " + oddcounter); 

    } 
} 
+2

簡単ではあるが、やや悪い解決策は、最初は「int sum = 1」です。合計を増やす前にifステートメントを追加することができます。 – byxor

+0

私は合計に追加する前に、ブレークのあるif文を使用してしまいました。 –

答えて

4

はかなり頻繁に、Cのような言語のユーザーが同じような状況で「出口ループ」(break)を使用しての事をしないでください。サイドノート、「永遠にループは」一部の人々はwhile(true)よりも優れていると言うfor(;;)で記述することができたよう

while (true) 
    { 

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

     if(numbertyped == -1) 
     { 
      break; 
     } 

     sum = sum + numbertyped; 
    } 

:あなたは、代わりにこのような何かをしたいと思います。しかし、ほとんどの人はwhile(true)を読みやすく表示しています。個人的に私はfor(;;)を使用します。どちらの方法でも、両方が適切に最適化されているため、実行時に違いはありません。 for(;;)について

参考: while (1) Vs. for (;;) Is there a speed difference?

+0

ありがとう、私には意味があり働きました! –

8

あなたは

while ((numbertyped = Integer.parseInt(reader.nextLine())) != -1) { 
    // ... 

とループ本体の意志のようなものに

while (numbertyped != -1) { 
    numbertyped = Integer.parseInt(reader.nextLine()); 

を変更する、とすぐ-1が入力されると、あなたのループを終了することができます-1numbertypedに割り当てられている場合は入力しないでください。編集内容に基づいて

、私はあなたがsum += numbertyped;sum = sum + numbertyped;を短縮し、あなたがevencounteroddcounterを加算することによりhowmanyを計算することができることを示唆しているかもしれません。同様に、

System.out.println("Type numbers: "); 
while (true) { 
    numbertyped = Integer.parseInt(reader.nextLine()); 
    if (numbertyped == -1) { 
     break; 
    } 
    if (numbertyped % 2 == 0) { 
     evencounter++; 
    } else { 
     oddcounter++; 
    } 
    sum += numbertyped; 
} 
int howmany = evencounter + oddcounter; 
double average = (double) sum/howmany; 
+0

うん!すばらしいです!ちょうどの場合のために 'while()'ステートメントの中でプログラム全体を書くのはどうですか... B-) –

0

私はこのケースで考えて、あなただけのwhileループ内の文の順序を逆にすることができます。

 int numbertyped = 0; 
     int sum = 0; 

     System.out.println("Type numbers: "); 

     while (numbertyped != -1) { 

      sum = sum + numbertyped; 

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

     } 

最初のループは、numberTypedは完璧である、0である - それは、ループを終了しません、それは実際に合計には何も追加しません。その後、それが-1かどうかを確認した後でない限り、合計は変更されません。

+0

良いアイデア、私はそれを考えていない! –

関連する問題