我试图编写一个函数来显示锯齿状数组中的所有组合,其中每个组合包含每个子数组中的一个元素。锯齿状数组可以包含任意数量的数组,每个数组可以包含任意数量的元素。例如。对于以下数组: a [0] = {1,3,5} a [1] = {2,4} 它应该返回: (1,2) (1,4) (3,2) (3,4) (5,2) (5,4)
我想过这样做,但马上遇到了麻烦。逻辑上它看起来可以获得1,2和1,4但是然后下一次运行我被设置回0(对不起devel机器现在测试)。 有人可以提出更好的解决方案吗?
这是我的代码
for (int i = 0; i < array1.length(); i++)
for (int j = 0; j < array2.length(); j++)
if (j < array2.length())
i = 0;
else
i++;
System.out.println(array1[i] "," array2[j])
答案 0 :(得分:1)
你不需要这个:
if (j < array2.length())
i = 0;
else
i++;
i在for循环中自动递增。
这应该没问题:
for (int i = 0; i < array1.length(); i++)
for (int j = 0; j < array2.length(); j++)
System.out.println(array1[i] "," array2[j])
答案 1 :(得分:0)
如果我正确理解你的问题(我可能不是),我想你只需要
for (int i = 0; i < array1.length(); i++){
for (int j = 0; j < array2.length(); j++){
System.out.println(array1[i] "," array2[j]);
}
}
达到理想的效果
答案 2 :(得分:0)
这个怎么样:
int a [] = {1,2,3}; int b [] = {1,2};
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < a.length; j++) {
System.out.println(a[i]+","+a[j]);
}
}
答案 3 :(得分:0)
循环中的if
语句会破坏所有内容。您只需要2个嵌套循环即可完成任务:
for (int i = 0; i < array1.length(); i++)
for (int j = 0; j < array2.length(); j++) {
System.out.println(array1[i] + "," + array2[j]);
}
}
答案 4 :(得分:0)
for (int i = 0; i < array1.length(); i++)
for (int j = 0; j < array2.length(); j++)
System.out.println("(" + array1[i] + "," array2[j] + ")");
答案 5 :(得分:0)
这是一个适用于任意数量数组的通用解决方案(请注意此算法运行时的指数性质):
int[][] arrays = new int[][]
{
{1, 2, 3, 4, 5, 6},
{1, 2, 3, 4, 5, 6},
{1, 2, 3, 4, 5, 6}
}; // let's print all fair rolls of a 3d6
if (arrays.length == 0) return; // this is why we can't have nice things
int[] currentPos = new int[arrays.length];
while(currentPos[arrays.length - 1] != arrays[arrays.length - 1].length)
{
// print the current value
System.out.print(arrays[0][currentPos[0]]);
for (int i = 1; i < arrays.length; ++i)
System.out.print(", " + arrays[i][currentPos[i]]);
System.out.println();
// increment the "counter"
++currentPos[0];
for (int i = 1; i < arrays.length; ++i)
{
if (currentPos[i - 1] == arrays[i - 1].length)
{
currentPos[i - 1] = 0;
++currentPos[i];
}
else break;
}
}