public class aufgabe1 {
public static double[] mittelwert(double[] m){
double mittelw =0;
double[] neuesArray= new double[0];
for (double i : m)
{
mittelw+=i;
mittelw= mittelw/(double)m.length;
}
for(int i=1;i>m.length;i++){
if (m[i]>mittelw){
neuesArray[i]=m[i];
}
}
return neuesArray;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double[]x={1,2,3,4,5,6,7,8,9,10};
for (double z : mittelwert(x))
{
{
System.out.print(z + " ");
}
System.out.println();
}
}
}
我需要实现一个获取双数组的方法,并返回一个新的double数组,其中包含的值大于第一个数组的平均值,我已经尝试过,但我不知道如何获取数组的输出,以检查它是否有效,因为我甚至没有得到我当前代码的输出。
答案 0 :(得分:2)
这里有一些问题。首先是你不正确地计算平均值。在计算总和之后,您应该只将其除以元素总数:
double mittelw = 0;
for (double i : m)
{
mittelw+=i;
}
mittelw = mittelw / (double)m.length;
接下来是你将数组初始化为零元素。 你永远无法在这里放任何东西。它没有元素。
double[] neuesArray = new double[0];
这里的困难是我们将它初始化为什么?我们不知道有多少元素会超过平均值,并且在创建数组后我们无法更改数组的大小。
一种解决方案是将其初始化为与输入相同的长度。你可以在这里使用for-each循环,但我们需要单独计算多少元素超过平均值。
double[] neuesArray = new double[m.length];
int numOverAverage = 0;
for (double i : m)
{
if (i > mittelw)
{
neuesArray[numOverAverage] = i;
numOverAverage++;
}
}
最后,我们需要将数组修剪为正确的大小,否则数组的末尾仍将填充零。您可以使用Arrays.copyOfRange
来完成此操作。
return Arrays.copyOfRange(neuesArray, 0, numOverAverage);
这意味着从{0}到numOverAverage
的{{1}}复制并返回新数组。
您也可以创建第三个数组并再次复制这些值,这就是neuesArray
无论如何都要做的事情。