我该怎么做?让 k 为用户提供一个整数,我需要"动态建立" k 级别的嵌套循环,例如:
如果 k = 5,则:
int[] a = new int[k];
for(int i=0; i<256; i++){
for(int j=0; j<256; j++){
for(int ke=0; ke<256; ke++){
for(int l=0; l<256; l++){
for(int m=0; m<256; m++){
a[0] = i;
a[1] = j;
a[2] = ke;
a[3] = l;
a[4] = m;
if (isCap(a)) //do something;
}
}
}
}
}
但如果 k = 3,则:
int[] a = new int[k];
for(int i=0; i<256; i++){
for(int j=0; j<256; j++){
for(int ke=0; ke<256; ke++){
a[0] = i;
a[1] = j;
a[2] = ke;
if (isCap(a)) //do something;
}
}
}
答案 0 :(得分:0)
使用递归:
int[] a = new int[k];
loop(256,0,a);
void loop(int length, int k, int[] a){
if(k<a.length) // the array determines the maximum depth, you could pass the size instead
for(int i=0; i<length; i++) {
loop(length,k+1,a);
a[k] = i;
if(k==a.length-1){ // this will only execute in the innermost loop
if (isCap(a)) doSomething();
}
}
}
你也可以把它写成:
void loop(int length, int k, int[] a){
if(k<a.length)
for(int i=0; i<length; i++) {
loop(length,k+1,a);
a[k] = i;
}
else if (isCap(a)) doSomething();
}
如果你需要在生产中使用它,请调试上面的代码,我还没有测试过,但是你得到了这个概念。
答案 1 :(得分:0)
这就是递归的目的。
void recursiveInteration(int[] a, int currentIndex) {
if (currentIndex <0) {
//do something with a
return;
}
for (int i=0; i< 256; ++i) {
a[currentIndex] = i;
recursiveInteration(currentIndex-1);
}
}
你可以按如下方式使用它:
recursiveInteration(a, 5);
答案 2 :(得分:0)
似乎你有生成所有k坐标皮质的任务,其中k beetwen 0(包括)和256(不包括)并使用你的函数isCap()检查它们。
我建议你写两个函数:增加cortage:
inc([0,0,0,0,0]) = [0,0,0,0,1]
或inc([12,13,15,5,255]) = [12,13,15,6,0]
并检查功能测试,如果cortage是最大的。在你的情况下:
boolean isCortageMaximum(a){
return a == [255,255,255,255,255];
}
然后你的循环将跟随:
while(!isCortageMaximum(a)){
if(isCap(a){
//your actions here
}
inc(a);
}