2015-01-09 86 views
-1

我需要編寫一個程序,該程序可以找到數組中所有值的平均值,然後返回大於平均值的程序。Java,找不到數組的平均數

import java.util.*; 
public class AboveAverage { 

    public static void main(String args[]) throws Exception { 
     Scanner kbd = new Scanner(System.in); 
     int count=0, num; 
     int nums[] = new int[1000]; 
     double sum = 0; 
     double average = 0; 

     System.out.println("Input +ve integers, to stop type 0"); 
     num = kbd.nextInt(); 
     while(num > 0) { 
      nums[count] = num; 
      count = count + 1; 
      num = kbd.nextInt(); 
     } 

     int d = 0; 
     while (d < 1000) { 
      sum += nums[d]; 
      d++; 
      average = sum/nums[d]; 
     } 

     for(int i=0; i < count ; i=i+1) { 
      System.out.print(nums[i] + " "); 
     } 
     System.out.println(average); 
    } 
} 

在我看來問題是在這條線 我嘗試了一個低於其給出了一個例外

異常線程「main」 java.lang.ArrayIndexOutOfBoundsException:1000 在AboveAvarage.main(AboveAvarage。 Java的:23)

average = sum/nums[d]; 

我也試過

average = sum/nums.length; 

哪給了我的總和而不是平均值。

+0

如果'd'達到'count',用'count'除法,並停止''while''循環。 – rgettman 2015-01-09 23:34:20

+2

你爲什麼在'while'循環中指定'average'? – khelwood 2015-01-09 23:35:11

回答

0

你不需要其他的循環,輸入時加總和。完成後,只需數

while(num > 0) { 
    nums[count] = num; 
    count = count + 1; 
    sum += num; 
    num = kbd.nextInt(); 
} 

average = sum/count; 
1

在while循環正在收集值劃分,使用的是count跟蹤提供了多少價值。

在隨後的循環來計算平均,你應該只看看count項目數組:

int d = 0; 
while(d<count) { 
    sum += nums[d]; 
} 
average = sum/count; 

注意你不需要在循環中計算average - 做到這一點,一旦你總結了價值。

2

請記住,Java中的數組索引從零開始?這意味着您的nums陣列中允許的索引是0999

現在看這個循環:

int d = 0; 
while (d < 1000) { 
sum += nums[d]; 
d++; 
average = sum/nums[d]; 
} 
  • 首先,它會將當前數量的總和。這是對的。
  • 然後,它增加數字。
  • 然後它使用遞增的數字訪問nums[d]來計算平均值。

現在,想象你在上一輪。 d999

  • 首先,它將當前數字加到總和上。
  • 然後它增加d。現在它是1000.
  • 然後它使用遞增的數字訪問nums[d]。但這意味着nums[1000]。這是一個非法索引。

所以這就解釋了爲什麼你有一個ArrayIndexOutOfBoundsException。增加後不應該再使用索引,因爲while只能保證其之前的值小於1000。如果您更改該值,則需要再次測試。這就是爲什麼通常遞增步驟是循環中的最後一步。

至於你的邏輯:

計算平均值,你首先需要知道的總和。知道總和後,您可以除以您正在平均的項目數。所以你需要將總和除以你閱讀的項目數量。

所以:

  • 你應該做一個循環可達1000如果輸入0後5個號碼,當你輸入的數據,那麼就會出現在陣列的其餘部分沒有值(或者說,那裏會有零)。
  • 您可以計算總和,正如另一個答案告訴您的,在第一個循環中。沒有必要在第二個循環中做到這一點。
  • 您不會在同一步驟中計算總和和平均值。您首先必須完成計算總和(完成循環,無論是第一個還是第二個循環),然後才能除以項目數(您保存在count中)。
  • 然後你必須經過另一個循環,打印比平均值大的數字。您的打印循環打印全部的數字。您應該檢查每個數字,看它是否大於您計算的平均值,並且只有在打印出來。

提示:真的應該只有兩個循環:一個讀取數字和計算countsum。然後你計算平均值,但這不是一個重複的動作,所以它應該而不是在一個循環中。第二個循環用於打印高於平均值的數字。