public static double BelowAverage(ArrayList<Double> Averages) {
int i, aveless = 0; double avg = 0;
for(i = 0; i < Averages.size(); i++)
avg = Averages.get(i);
avg /= Averages.size();
for(i = 0; i < Averages.size(); i++)
if(Averages.size() < avg)
aveless++;
return aveless;
}
答案 0 :(得分:2)
无需使用包装,您可以使用double
代替Double
。
您的变量命名很奇怪,为什么您的平均值为ArrayList
而不是数字?
关注Java naming conventions:
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
FirstWordUpperCaseClass
ALL_WORDS_UPPER_CASE_CONSTANT
并始终如一地使用
您已经有一个计算平均值的方法,为什么不使用它?
因此,例如,您的代码可能看起来像这样(略有修改):
public static int belowAverage(List<Double> numbers) {
double avg = calculateAverages(numbers); //Go, get the average using the method you already have
int aveless = 0;
for (int i = 0; i < numbers.size(); i++) {
if (numbers.get(i) < avg) { //Instead of comparing the numbers array size, compare the number against the average.
aveless++;
}
}
return aveless;
}
我添加了for
循环的开括号和右大括号,因为我认为这样更容易阅读。
我还在此方法上将返回类型更改为int
而不是double
,因为您只想计算,因此,不需要小数点并移动System.out.println()
调用calculateAverage()
方法的main
方法。
我还将参数类型更改为接口1(从ArrayList
到List
)
答案 1 :(得分:1)
你的问题似乎就在这条线上:
if(Averages.size() < avg) aveless++;
您应该检查Averages.get(i) < avg
,否则循环的重点是什么?
答案 2 :(得分:0)
计算&#39;数字的数量&#39;它的值比平均值小,你应该将该数组中的每个元素与平均值进行比较,而不是与数组的大小进行比较。尝试如下:
public static double BelowAverage(ArrayList<Double> Averages) {
int i, aveless = 0; double avg = 0;
for(i = 0; i < Averages.size(); i++)
avg = Averages.get(i);
avg /= Averages.size();
for(Double a : Averages)
if(a < avg) aveless++;
return aveless;
}
答案 3 :(得分:0)
如果我理解正确,并且您想要一个包含低于平均值的所有数字的列表,您应该更改返回值和代码,如下所示:
public static ArrayList<Double> BelowAverage(ArrayList<Double> Averages) {
// You already have a method for calculating the average, so use it
double avg = CalculateAverages(Averages);
ArrayList<Double> aveless = new ArrayList<Double>();
int i;
for(i = 0; i < Averages.size(); i++){
double number = Averages.get(i);
if(number < avg){
aveless.add(number);
}
}
return aveless;
}
答案 4 :(得分:0)
您的代码存在一些问题。让我们一次一个地浏览它们。
第一个问题:
for(i = 0; i < Averages.size(); i++)
avg = Averages.get(i); //this line
avg /= Averages.size();
您只需在循环中重新分配avg
的值。你想要做的是不断添加值。将=
替换为+=
以获取avg += Averages.get(i);
。
第二个问题:
for(i = 0; i < Averages.size(); i++)
if(Averages.size() < avg)
aveless++;
您要检查avg
是否大于列表的大小,这不是您想要做的事情。您想知道的是avg
是否大于列表中的值。您需要将Averages.size()
替换为Averages.get(i)
。这是一个相对容易发现的错误,因为循环现在并没有真正实现,所以请注意这样的事情。
编辑:还有一些其他问题。 avg
应该是double而不是int,因为int不能存储小数位,并且无法保证平均值是整数,因此您将得到舍入误差。此外,你的方法应该返回一个int而不是一个double,因为&#34;低于平均值的数值&#34; 总是一个整数。