有没有更好的方法来实现这些嵌套循环?

Caf*_*tte 1 java loops for-loop

假设有三个数组:

char [] one = {'a','b','c'};
char [] two = {'1','2','3'};
char [] three = {'x','y','z'};
Run Code Online (Sandbox Code Playgroud)

如果我想像这样打印它们:

a 1 x
a 1 y
a 1 z

a 2 x
a 2 y
.....
c 3 z
Run Code Online (Sandbox Code Playgroud)

我必须创建三个嵌套循环;

for(char i : one)
  for(char j : two)
    for(char k : three)
       //.....
Run Code Online (Sandbox Code Playgroud)

假设我有7个数组,它将是7个嵌套循环.

是否有更好的方法可以做到这一点或API?我知道你可能会问你为什么做这样的事情,这只是思考的问题.

Gen*_*ene 5

诀窍是使用索引数组.更新它们就像汽车中的里程表:最不重要的索引然后如果溢出设置为零并继续下一个...当没有溢出时,更新完成.继续打印.当最后一个索引溢出时,打印完成.

// Accept an array of character arrays and print a nest
// of their contents.
static void print(char [] [] a) {
    int n_arrays = a.length;
    int [] indices = new int[n_arrays];  // All set to 0 by java
    // Decrement so that first increment is to all zeros. Avoids test for empty arrays.
    indices[n_arrays - 1] = -1; 
    for (int j = 0;;) {
        // Increment indices.
        for (j = n_arrays - 1; j >= 0; j--) {
            if (++indices[j] >= a[j].length) {
                indices[j] = 0;
            }
            else {
                break;  // No overflow. Increment is complete.
            }
        }
        if (j < 0) {
            break; // Last index overflowed.  We're done.
        }
        // Print.
        for (int i = 0; i < n_arrays; i++) {
            System.out.print(a[i][indices[i]]);
        }
        System.out.println();
    }
}

// Varargs version.
static void printArgs(char [] ... a) {
    print(a);
}

static char [] one = {'a','b','c'};
static char [] two = {'1','2','3'};
static char [] three = {'x','y','z'};

public static void main(String[] a) {
    print(new char [] [] { one, two, three } );
    printArgs(one, two, three);
}
Run Code Online (Sandbox Code Playgroud)