Java,找不到数组的平均数
问题描述:
我需要编写一个程序,该程序可以找到数组中所有值的平均值,然后返回大于平均值的程序。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;
哪给了我的总和而不是平均值。
答
你不需要其他的而循环,输入时加总和。完成后,只需数
while(num > 0) {
nums[count] = num;
count = count + 1;
sum += num;
num = kbd.nextInt();
}
average = sum/count;
答
在while循环正在收集值划分,使用的是count
跟踪提供了多少价值。
在随后的循环来计算平均,你应该只看看count
项目数组:
int d = 0;
while(d<count) {
sum += nums[d];
}
average = sum/count;
注意你不需要在循环中计算average
- 做到这一点,一旦你总结了价值。
答
请记住,Java中的数组索引从零开始?这意味着您的nums
阵列中允许的索引是0
到999
。
现在看这个循环:
int d = 0;
while (d < 1000) {
sum += nums[d];
d++;
average = sum/nums[d];
}
- 首先,它会将当前数量的总和。这是对的。
- 然后,它增加数字。
- 然后它使用递增的数字访问
nums[d]
来计算平均值。
现在,想象你在上一轮。 d
是999
。
- 首先,它将当前数字加到总和上。
- 然后它增加d。现在它是1000.
- 然后它使用递增的数字访问
nums[d]
。但这意味着nums[1000]
。这是一个非法索引。
所以这就解释了为什么你有一个ArrayIndexOutOfBoundsException
。增加后不应该再使用索引,因为while
只能保证其之前的值小于1000。如果您更改该值,则需要再次测试。这就是为什么通常递增步骤是循环中的最后一步。
至于你的逻辑:
计算平均值,你首先需要知道的总和。知道总和后,您可以除以您正在平均的项目数。所以你需要将总和除以你阅读的项目数量。
所以:
- 你应该不做一个循环可达1000如果输入0后5个号码,当你输入的数据,那么就会出现在阵列的其余部分没有值(或者说,那里会有零)。
- 您可以计算总和,正如另一个答案告诉您的,在第一个循环中。没有必要在第二个循环中做到这一点。
- 您不会在同一步骤中计算总和和平均值。您首先必须完成计算总和(完成循环,无论是第一个还是第二个循环),然后才能除以项目数(您保存在
count
中)。 - 然后你必须经过另一个循环,打印比平均值大的数字。您的打印循环打印全部的数字。您应该检查每个数字,看它是否大于您计算的平均值,并且只有在打印出来。
提示:真的应该只有两个循环:一个读取数字和计算count
和sum
。然后你计算平均值,但这不是一个重复的动作,所以它应该而不是在一个循环中。第二个循环用于打印高于平均值的数字。
如果'd'达到'count',用'count'除法,并停止''while''循环。 – rgettman 2015-01-09 23:34:20
你为什么在'while'循环中指定'average'? – khelwood 2015-01-09 23:35:11