2013-10-22 58 views
2

我需要編寫一個應用程序,它可以將10 000個用戶輸入值存儲在數組中,並且可以返回所有值的總和和所有值的平均值。如果用戶寫入數字「0」,則必須停止輸入。有一些需要滿足條件:獲取用戶輸入數組中所有值的平均值和總和?

  1. 的值需要被存儲在數組
  2. 在使用者輸入的數據必須是一while循環內
  3. 分析(數學,所以要說)必須在用戶輸入完成後完成。
  4. 應用程序不允許循環任何空元素。

這是我今天上課的額外作業。

到目前爲止,我已經寫了這一點:

import java.util.Scanner; 

    public class Ovning_54 { 
     public static void main(String[] args) { 
      Scanner input = new Scanner(System.in); 
      int[] list; 
      list = new int[10000]; 
      int sum = 0; 
      int avr = 0; 
      int x = 0; 
      int number; 

      System.out.print("Add number " + (x + 1) + ": "); 
      number = input.nextInt(); 

      while (x <= list.length && (number != 0 || x == 0)) { 
       list[x] = number; 
       x++; 
       System.out.print("Add number " + (x + 1) + ": "); 
       number = input.nextInt(); 
      } 

      for (int i = 0; i < x; i++) { 
       sum += list[i]; 
       avr = sum/x; 
      } 

      System.out.println("The sum of all values are: " + sum); 
      System.out.println("The average value of the numbers are: " + avr); 
      } 

    }  

我想我已經解決了它!似乎運行正常,我沒有得到任何錯誤消息。我仍然想知道是否違反了條件#1。如果沒有,是否有解決方法?

+1

'分析(數學,可以這麼說),必須在用戶輸入後,做的是done.' Awhh,最優雅的解決方案會在路上 – Cruncher

+0

@ Cruncher計算出來。是的,我們在課上有這個。如何在while循環內計算。但是這有點棘手。 – Dinco

+0

你真的很接近!這裏最大的問題是你輸入了多少元素,這對計算平均值非常重要(並避免循環任何空元素)。 – Cruncher

回答

1

用這個替換你的while (x <= list.length)

while (x <= list.length && (number != 0 || x==0)) 

更換你的for循環

for(int i = 0; i < list.length; i++){ 
    sum += list[i]; 
} 

與這一個。現在

for(int i = 0; i < x; i++){ 
    sum += list[i]; 
} 

修改後的代碼看起來像下面

public static void main (String[] args){ 
      Scanner input = new Scanner(System.in); 
      int[] list; 
      list = new int[10000]; 
      int sum = 0; 
      int avr = 0; 
      int x = 0; 
      int number; 

      while (x <= list.length && (number != 0 || x==0)){ 
       System.out.print("Add number " + (x+1) + ": "); 
       number = input.nextInt(); 
       list[x] = number; 
       x++;      
      } 

      for(int i = 0; i < x; i++){ 
       sum += list[i]; 
      } 

      } 
+0

這是如何改進代碼的?有什麼不同? @ Cruncher。得到它了! – Dinco

+0

@Cruncher是的,你是對的。謝謝..更新 – Prabhakaran

+0

如果我不給int數賦一個值,我會得到一個錯誤。 – Dinco

2

變化

x = list.length;break;

這樣會保留你的X,這是他們多少條目進行。或者,您可以將另一個變量設置爲x,然後將x設置爲list.length。我知道一些老師告訴學生for循環變得不使用破(我還是不明白)

然後您:

for(int i = 0 ; i < x ; i++) 

然後後for循環,你的平均總和/ X。

編輯:在第二次看後,它看起來好像當你去計算平均值時x可能是1太大。你可以通過在你的計算中使用(x-1)(不太自然),或者在你的while循環(更自然的)中增加x之前的中斷條件來解決這個問題。

+0

我們還沒有學會實際上做了什麼,所以我猜測我不能在這個任務中使用它。 – Dinco

+0

@Dinco在這種情況下,我建議在你的while循環之前加上'number = input.nextInt();'作爲while循環的最後一行。然後在while條件中添加'&& number!= 0'。然後你可以把if語句和break一起放下。 – Cruncher