JAVA:VarArgs添加变量

时间:2014-06-18 11:58:29

标签: java

我有这个方法:

 public static double[] averages(double[]... input) {

   double[] result = new double[input.length];

   for(int i = 0; i< result.length; i++) {
    result[i] = Arrays.stream(input[i]).average().getAsDouble();
   }

   return result;
  }

我不知道我应该切换到这个方法有多少双数组。如何使用for循环将所有变量double []添加到方法中?

在这种情况下我:

       ArrayList<double[]> sim=new ArrayList<double[]>();

    arrays.add(new double[]{0.25,0.97,0.47,0.31,0.71});
    arrays.add(new double[]{0.51,0.91,0.88,0.12,0.15});
    arrays.add(new double[]{0.47,0.71,0.42,0.17,0.71});
    arrays.add(new double[]{0.41,0.55,0.53,0.64,0.81});
    arrays.add(new double[]{0.91,0.14,0.71,0.11,0.61});

但不幸的是,在运行程序之前我不知道数组double []。

我应该去方法averages()在ArrayList“sim”

中出现5个双数组

我应该得到这样的东西:

 averages(arrays.get(0),arrays.get(1),arrays.get(2),arrays.get(3),arrays.get(4))

但内容dell'ArrayList“sim”在执行之前我不知道!

3 个答案:

答案 0 :(得分:1)

首先,你可能写错了,不是吗?

sim.add(new double[]{0.25,0.97,0.47,0.31,0.71});

会更加明显。

然后你可以按如下方式调用你的方法:

double[] results = averages(sim.toArray(new double[]{}));

我没有尝试运行它,新数组就在那里,因为方法toArray()由于某种原因返回Object[]而不是T[]

答案 1 :(得分:0)

正如我在评论中所说,我并没有真正得到你的问题。但我想你想把你的平均值方法称为 -

ArrayList<double[]> sim = new ArrayList<double[]>();

sim.add(averages(new double[]{0.25,0.97,0.47,0.31,0.71}));
sim.add(averages(new double[]{0.51,0.91,0.88,0.12,0.15}));
sim.add(averages(new double[]{0.47,0.71,0.42,0.17,0.71}));
sim.add(averages(new double[]{0.41,0.55,0.53,0.64,0.81}));
sim.add(averages(new double[]{0.91,0.14,0.71,0.11,0.61}));

答案 2 :(得分:0)

我认为OP问题是:

  

“我必须做一些事情()到双打数组的列表,但我不知道这样的列表的大小。我怎样才能添加双打数组   列表中有一个(for)循环?“

如果我做对了,你必须要了解的第一件事是你的循环应该结束的条件。由于您不知道列表的大小,因此for循环不是您所需要的。您应该使用其他循环,例如具有众所周知的结束条件的while loop

告诉我们这些双打阵列的来源,也许我们可以为您提供更多帮助。

对于doSomething()部分,例如计算每个数组的avarage并将其放在另一个数组中,假设一切正常,调用

averages(arrays.get(0),arrays.get(1),arrays.get(2),arrays.get(3),arrays.get(4))

应该成为

averages(sim)

使用这样的方法

 public static double[] averages(List<double[]> input) {

   double[] result = new double[input.size()];

   int i=0;
   for(double[] doubleArray: input) {
    result[i++] = Arrays.stream(doubleArray).average().getAsDouble();
   }

   return result;
  }