如何获取2D数组中每个元素的所有可能组合?
我有一个2D阵列int[][] lists=new int[][]{{22, 23},{34, 35},{47, 15}};
如何获取2D数组中每个元素的所有可能组合?
我得各个元件的所有组合在每行中,像这样: 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)
。 我只需要获得平均值最高的组合。 因为我的初始数组可以有大量的行/列,我试图生成每个组合,并检查它的平均值是否高于然后记忆它。 这是我的代码,但显然它不起作用。有人能帮我吗?
public static int average(int[]a)
{
int sum=0;
for(int i=0;i<a.length;i++)sum+=a[i];
return sum/a.length;
}
public static void cartesian(int[][] lists, int[] values, int n)
{
int sum=0;
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (n == lists.length) {
if(average(values)>sum) {
result.clear();
result.add(Arrays.stream(values).boxed().collect(java.util.stream.Collectors.toList()));
sum=average(values);}
}
else
{
for(int i: lists[n]) {
values[n] = i;
cartesian(lists, values, n+1);
}
}
return result;
}
public static void main(String[] args)
{
List<List<Integer>> result = cartesian(lists, new int[lists.length], 0);
for(List<Integer> i: result) System.out.println(i);
}
我想你的cartesian
代码中有几个逻辑错误。从我可以说,这是决定哪个阵列具有最高平均值的函数。首先,在声明中
int sum=0;
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (n == lists.length) {
if(average(values)>sum) {
的最后一行是无关紧要的 - 你定义sum
所以,如果你的价值观是不是消极的if语句将永远是正确的。此外,在后面的代码,
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;
}
我试过你的鳕鱼,我得到一个错误java.lang.ArrayIndexOutOfBoundsException'int [] totest = lists [n];' – gimmi
刚刚编辑它,它应该是'lists.length - 1' :) – sahilkmr78
对不起,问题也是我没有添加if语句来递归调用'else'部分的函数。 – sahilkmr78
我相当肯定,[Commons Math](http://commons.apache.org/proper/commons-math/)有一个组合函数,可能是对此有用。不知道它是否做了阵列,也许只有nCr类型。 –