簡體   English   中英

Java,找不到數組的平均值

[英]Java, can't find average of an array

我需要編寫一個程序,該程序查找數組中所有值的平均值,然后返回大於平均值的值。

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

我認為問題在於這一行,我嘗試了以下給出異常的行

線程“主”中的異常java.lang.ArrayIndexOutOfBoundsException:AboveAvarage.main(AboveAvarage.java:23)為1000

 average = sum / nums[d];

我也試過

 average = sum / nums.length;

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

還記得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 然后你計算出平均值,但是這不是一個重復的動作,所以它應該是一個循環。 第二個循環用於打印高於平均值的數字。

在收集值的while循環中,您正在使用count來跟蹤提供了多少個值。

在隨后的循環中計算平均值,您應該只查看數組的count項:

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

請注意,您無需在循環內計算average -在對值求和后再進行計算。

您不需要另一個while循環,在輸入時求和。 完成后,除以計數

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

average = sum / count;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM