实现筛选double数组中大于平均值元素的方法及输出调试问题
解决你的数组筛选问题:无输出原因及修复方案
嘿,我看了你写的代码,现在没有输出主要是因为几个逻辑上的小问题,我帮你拆解一下并修复:
首先说说平均值计算的错误
你现在是在循环里每加一个元素就除以数组长度,这会把平均值算错!比如原数组总和是55,长度10,正确平均值是5.5,但你每次加完就除以10,结果会完全不对。应该先把所有元素的总和加完,循环结束后再除以长度:
原来的错误代码片段:
for (double i : m) { mittelw+=i; mittelw= mittelw/(double)m.length; // 这里不该放在循环里! }
修复后:
for (double num : m) { mittelw += num; // 先累加所有元素 } mittelw = mittelw / m.length; // 循环结束后再算平均值
然后是遍历数组的循环完全没执行
你写的循环条件是i>m.length,但数组的索引是从0到m.length-1,这个条件永远不成立,循环根本跑不起来,新数组自然是空的,所以没输出。而且你初始化的neuesArray长度是0,直接给它赋值还会报错数组越界。
这里推荐用ArrayList来动态收集符合条件的元素,最后再转成double[],这样就不用提前知道数组长度了。
完整的修复代码
import java.util.ArrayList; import java.util.List; public class aufgabe1 { public static double[] mittelwert(double[] m) { // 先处理空数组的情况,防止除以0报错 if (m == null || m.length == 0) { return new double[0]; } double mittelw = 0; // 计算所有元素的总和 for (double num : m) { mittelw += num; } // 计算平均值 mittelw = mittelw / m.length; // 用ArrayList收集大于平均值的元素 List<Double> tempList = new ArrayList<>(); for (double num : m) { if (num > mittelw) { tempList.add(num); } } // 把ArrayList转成double数组 double[] neuesArray = new double[tempList.size()]; for (int i = 0; i < tempList.size(); i++) { neuesArray[i] = tempList.get(i); } return neuesArray; } public static void main(String[] args) { double[] x = {1,2,3,4,5,6,7,8,9,10}; double[] result = mittelwert(x); // 遍历输出结果 for (double z : result) { System.out.print(z + " "); } System.out.println(); } }
运行结果说明
运行这段代码后,你会看到输出:6.0 7.0 8.0 9.0 10.0,这正是原数组里大于平均值(5.5)的元素,完全符合你的需求。
另外,主方法里我调整了输出的写法,先接收返回的数组再遍历,这样逻辑更清晰,也能确保输出所有结果。
内容的提问来源于stack exchange,提问作者RYU5
相关产品推荐
相关产品推荐

