如何获得2D阵列中每个元素的所有可能组合?

时间:2016-06-08 12:47:56

标签: java multidimensional-array

我有一个2D阵列
clients

我必须得到每一行中每个元素的所有组合,如下所示: int[][] lists=new int[][]{{22, 23},{34, 35},{47, 15}};

然后,对于来自最新阵列的每一行,我必须计算平均值。为此,我创建了一个方法int [][] result= {{22,34,47},{22,34,15},{22,35,47},{22,35,15},{23,34,47},{23,34,15},{23,35,47},{23,35,15}}。 我只需要获得平均值最高的组合。 因为我的初始数组可以有大量的行/列,所以我试图生成每个组合并检查它的平均值是否高于然后记住它。 这是我的代码,但显然它不起作用。有人能帮助我吗?

average(int[]a)

1 个答案:

答案 0 :(得分:-1)

我认为您的cartesian代码中存在一些逻辑错误。据我所知,这是确定哪个数组具有最高平均值的函数。首先,在声明中

int sum=0;
    List<List<Integer>> result = new ArrayList<List<Integer>>();
   if (n == lists.length) {
    if(average(values)>sum) {

最后一行无关紧要 - 您已定义sum,因此如果您的值不是负数,则if语句将始终为true。此外,稍后在代码中,

else 
   {
      for(int i: lists[n]) {
       values[n] = i;
       cartesian(lists, values, n+1);
    }

我认为你的意思是将cartesian(lists, values, n+1)放在for循环之外。以下是我将如何重写此代码:

public static void cartesian(int[][] lists, int[] values, int n) 
{
   int sum=0;
   List<List<Integer>> result = new ArrayList<List<Integer>>();
   int[] totest = lists[n];
   if(average(totest) > average(values) || r.equals(null)) {
       result.clear();
       result.add(Arrays.stream(totest).boxed().collect(java.util.stream.Collectors.toList()));
      if(n != lists.length - 1){cartesian(lists, totest, n + 1)};
}
  else 
   {
       if(n != lists.length - 1){cartesian(lists, totest, n + 1)};
   }
return result;
}