Java 实现获取双数组并返回新双数组的方法

Java 实现获取双数组并返回新双数组的方法,java,arrays,arraylist,Java,Arrays,Arraylist,我需要实现一个获取双数组的方法,并返回一个新的双数组,其中包含的值大于第一个数组的平均值,我已经尝试过了,但我不确定如何获取数组的输出以检查它是否有效,因为我的当前代码甚至没有输出。这里有一些问题。首先,你计算的平均值不正确。只有在计算了总和之后,才能将其除以元素总数: public class aufgabe1 { public static double[] mittelwert(double[] m){ double mittelw =0; dou

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

这里有一些问题。首先,你计算的平均值不正确。只有在计算了总和之后,才能将其除以元素总数:

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 mittelw = 0;
for (double i : m)
{
    mittelw+=i;
}
mittelw = mittelw / (double)m.length;
这里的困难是我们初始化它的目的是什么?我们不知道有多少元素将大于平均值,并且我们无法在创建数组后更改数组的大小

一种解决方案是将其初始化为与输入相同的长度。您可以在这里为每个循环使用一个,但是我们需要单独计算有多少元素超出了平均值

double[] neuesArray = new double[0];
最后,我们需要将数组修剪到正确的大小,否则数组的末尾仍将填充零。您可以使用来完成此任务

double[] neuesArray = new double[m.length];

int numOverAverage = 0;
for (double i : m)
{
    if (i > mittelw)
    {
        neuesArray[numOverAverage] = i;
        numOverAverage++;
    }
}
这意味着从索引0复制到
neuesArray
numoverage
,并返回新数组

您也可以创建第三个数组并再次复制这些值,这就是
copyOfRange
将要做的一切



为什么您认为这条线可以帮助您计算平均值
mittelw/(double)m.length
,因为我计算数组值的和,然后除以it@R.You每次循环一个值时是否需要执行此操作?不,你是对的,我将把它放在循环之外。非常感谢,任务还包括选择可行的返回类型。当输入是数组时,您认为返回数组更好吗,因为我使用ArrayList更改了代码?因为input=output?@R.You
ArrayList
在这里更有用,因为它将动态扩展(和收缩)。不需要第3步(修剪阵列)。但是您也对了,保持输入类型和输出类型相同是有意义的。通过使用
List
我们使我们的生活更轻松,但也可能使函数的调用者的生活更困难。使用
double[]
则相反。编程是一种权衡。很少有一个客观的“最佳”解决方案。所以随便你用吧。我没有使用
ArrayList的唯一原因是我不知道你是否知道它们。非常感谢@Michael
return Arrays.copyOfRange(neuesArray, 0, numOverAverage);