2017-01-01 31 views
0

因此,我正在處理一個項目,這一步要求我編寫一個要求輸入數字的程序,當輸入「-1」時,它將計算除-1之外的所有輸入數字的總和。我只是通過在循環後添加+1來解決這個問題,但我確定有另一種「正確」的方式來做這件事,我想學習如何。如何正確計算總和而不使用sum ++;?

任何幫助表示讚賞。 (注意:我一直在學習Java大約一週,所以請使用ELI5)

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); 

編輯:我的程序現在已經完成。我使用了在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) 
    { 

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

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

     sum = sum + numbertyped; 
    } 

作爲一個方面說明,一個「永遠循環」可以用for(;;)有些人說比while(true)更好寫。然而,大多數人認爲while(true)更容易閱讀。我個人使用for(;;)。無論哪種方式都得到了適當的優化,因此你將不會有運行時差異。

參考有關for(;;)while (1) Vs. for (;;) Is there a speed difference?

+0

謝謝你對我有意義並且工作過! –

8

您可以儘快進入-1終止你的循環,改變

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

喜歡的東西

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

和循環體當-1被分配給numbertyped時不會被輸入。

根據您的修改,我建議你可以縮短sum = sum + numbertyped;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

好主意,我沒想到! –