0

我试图编写一个函数来显示锯齿状数组中的所有组合,其中每个组合包含来自每个子数组的一个元素。锯齿状数组可以由任意数量的数组组成,每个数组可以有任意数量的元素。例如对于以下数组: 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(抱歉现在不在开发机器上测试)。有人可以提出更好的解决方案吗?

这是我的代码

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])
4

6 回答 6

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])
于 2013-06-18T16:54:39.240 回答
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;
    }
}
于 2013-06-18T17:27:46.960 回答
0
for (int i = 0; i < array1.length(); i++)
    for (int j = 0; j < array2.length(); j++)
        System.out.println("(" + array1[i] + "," array2[j] + ")");
于 2013-06-18T16:54:43.293 回答
0

如果我正确理解了您的问题(我可能不是),我认为您所需要的只是

for (int i = 0; i < array1.length(); i++){
  for (int j = 0; j < array2.length(); j++){
    System.out.println(array1[i] "," array2[j]);
  }
}

达到预期的结果

于 2013-06-18T16:53:42.507 回答
0

这个怎么样:

一个 [] = {1,2,3}; 诠释 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]);

    }

}
于 2013-06-18T16:54:01.370 回答
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]);
    }
}
于 2013-06-18T16:54:21.417 回答