2014-09-25 119 views
0
import java.util.*; 
public class Lab5_2{ 
    public static void main(String[]args){ 

     Scanner scan = new Scanner(System.in); 
     int num=0; 
     boolean choice=true; 
     int min= Math.min(100, num);// need to fix the min to the avg, won't print out 
     int max= Math.max(0, num); 
     int sum=+ num; 
     double avg= sum/(num+1); 

     while(choice==true){ 
      if(num>=0 && num<=100){ 
       System.out.println("Please enter a number between 0 and 100 "); 
       num= scan.nextInt(); 
       System.out.println("You entered: " + num);  
      }else if(num<0 || num>100){ 
       choice=false; 
       System.out.println("Thank you "); 
      } 
     } 
    } 
    /* 
     System.out.println("Min = " + min); 
     System.out.println("Max = " + max); 
     System.out.println("Sum = " + sum); 
     System.out.println("Avg = " + avg);*/ 
} 

我知道這是比較容易的方式,然後我做它似乎,但我不能爲我的生活弄清楚如何把我的代碼來計算min,max,sum和avg。我需要它,以便我可以輸入任意數量的數字並且不使用數組來計算它們(因爲我的類沒有得到)。如何計算最小值,最大值,總和,和AVG

預先感謝您

+3

請修復您的縮進。 – 2014-09-25 20:31:24

+1

我認爲一旦你進入while循環,你永遠不會得到新的最小/最大/平均計算。但正如Jeremy所說的那樣修復你的縮進:) – Quantico 2014-09-25 20:36:30

回答

3

首先,你應該採取Scanner.read while循環之外,因爲你不想要的是不是你的範圍內,要處理的數字:

while (choice) { 
    System.out.println("Please enter a number between 0 and 100 "); 
    num = scan.nextInt(); 
    if (num >= 0 && num <= 100) { 
     // accept number and update min, max, sum 
    } else { 
     choice = false; 
    } 
} 
現在

,讓我們計算那些我們以後的值:

  • 計算sum很簡單:首先,我們的總和0,每個接受編號是累積的。因此,要計算總和,我們只需添加numsum = sum + num

  • 最小值總是至少與先前迭代的最小值一樣大。我們不需要知道任何其他迭代的值,因此不需要數組(或其他集合)來存儲它們。我們只需檢查num是否小於以前的最小值,並替換最小值(如果爲真),即if (num < min) min = num;。這裏還有一個速記符號:min = num < min ? num : min;

  • 計算最大值等於計算最小值(正好相反)。我相信你可以找出解決方案。

  • 平均值不能在每次迭代中更新。但我們可以在最後計算它。平均值是多少?這是總和除以加數的總和。所以你需要計算你讀了多少次。您可以通過存儲您在每次迭代中增加的額外變量來完成此操作。

有了這些信息,您應該可以編寫代碼。請注意,在進入循環之前正確初始化變量至關重要。仔細想一想。此外,還有一個需要考慮的角落案例:如果用戶沒有輸入單個號碼,會發生什麼情況?在這種情況下,你的價值觀應該是什麼?不要忘記零分區是未定義的!