[英]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
數組中允許的索引是0
到999
。
現在看一下這個循環:
int d = 0;
while ( d < 1000 ) {
sum += nums[d];
d++;
average = sum / nums[d];
}
nums[d]
以計算平均值。 現在,假設您已進入最后一輪。 d
是999
。
nums[d]
。 但這意味着nums[1000]
。 那是非法索引。 因此,這說明了為什么會有ArrayIndexOutOfBoundsException
。 遞增索引后,永遠不要再使用索引,因為while
僅保證索引的先前值小於1000。如果更改該值,則需要再次測試。 這就是為什么增量步通常是循環中的最后一步的原因。
至於你的邏輯:
要計算平均值,您首先需要知道總和。 知道總和后,可以除以平均項目數。 因此,您需要將總和除以閱讀的項目數。
所以:
count
)。 提示 :實際上應該只有兩個循環:一個讀取數字並計算count
和sum
。 然后你計算出平均值,但是這不是一個重復的動作,所以它不應該是一個循環。 第二個循環用於打印高於平均值的數字。
在收集值的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.