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?我知道你可能会问你为什么做这样的事情,这只是思考的问题.
诀窍是使用索引数组.更新它们就像汽车中的里程表:最不重要的索引然后如果溢出设置为零并继续下一个...当没有溢出时,更新完成.继续打印.当最后一个索引溢出时,打印完成.
// 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)