我确定我想要完成的任务有一个 CS 术语,但我不确定它是什么。我有三个数组,我们称它们a
为 、b
和c
。我正在遍历数组的所有可能组合,这将是a*b*c
迭代。
我正在传递int
当前迭代的函数 an(例如iteration
从0
到 )以及、和a*b*c-1
的长度。我希望该函数能够打印出索引的每个唯一排列,仅根据迭代次数和 、 和 的长度计算得出。a
b
c
a
b
c
这就是我现在所拥有的:
class Test {
public static void printIndices(int i, int a, int b, int c) {
System.out.println(i%a + ", " + (i+1)%b + ", " + (i+2)%c);
}
public static void main(String[] args) {
int a[] = new int[2];
int b[] = new int[2];
int c[] = new int[3];
int iterations = a.length * b.length * c.length;
for (int i=0; i < iterations; i++){
printIndices(i, a.length, b.length, c.length);
}
}
}
它生成以下输出:
0, 1, 2
1, 0, 0
0, 1, 1
1, 0, 2
0, 1, 0
1, 0, 1
0, 1, 2
1, 0, 0
0, 1, 1
1, 0, 2
0, 1, 0
1, 0, 1
如您所见,有重复项。我希望输出为:
0, 0, 0
1, 0, 0
0, 1, 0
1, 1, 0
0, 0, 1
1, 0, 1
0, 1, 1
1, 1, 1
0, 0, 2
1, 0, 2
0, 1, 2
1, 1, 2
(顺序并不重要,只要每个排列都没有重复)。
显然我的输出行是错误的:
System.out.println(i%a + ", " + (i+1)%b + ", " + (i+2)%c);
获得我正在寻找的输出的正确操作是什么?
我知道这段代码看起来有点傻,这根本不是我实际在做的事情,但它很好地展示了这个案例。