实现获取double数组的方法,并返回一个新的double数组

时间:2018-05-15 16:02:25

标签: java arrays arraylist

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数组,其中包含的值大于第一个数组的平均值,我已经尝试过,但我不知道如何获取数组的输出,以检查它是否有效,因为我甚至没有得到我当前代码的输出。

1 个答案:

答案 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无论如何都要做的事情。

Runnable example