首页 > 解决方案 > 实现一个获取双精度数组并返回一个新双精度数组的方法

问题描述

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();
        }

    }

}

我需要实现一个获取双精度数组的方法,并返回一个新的双精度数组,其中包含大于第一个数组平均值的值,我已经尝试过了,但我不确定如何获得数组来检查它是否有效,因为我什至没有得到我当前代码的输出。

标签: javaarraysarraylist

解决方案


这里有几个问题。首先是您错误地计算了平均值。在计算总和后,您应该只将其除以元素总数:

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 复制到numOverAverageofneuesArray并返回新数组。

您也可以创建第三个数组并再次复制这些值,这就是copyOfRange在后台要做的所有事情。


可运行示例


推荐阅读