我有一个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)
答案 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;
}