以下代码是固定了四个层次之后的编码规则(格式如:xx-xx-xx-xx),如果层次不固定的话改怎么循环?for(int level1(层次1) = 1(开始编码); level1 <= 11(结束编码); level1++)
{
String s1 = level1 + "-";
for(int level2(层次2) = 1(开始编码); level2 <= 2(结束编码); level2++)
{
String s2 = level2 + "-";
for(int level3(层次3) = 1(开始编码); level3 <= 2(结束编码); level3++)
{
String s3 = level3 + "-";
for(int level4(层次4) = 1(开始编码); level4 <= 2(结束编码); level4++)
{
String s4 = String.valueOf(level4);
System.out.println("==>"+s1 + s2 + s3 + s4);
}
}
}
}
{
String s1 = level1 + "-";
for(int level2(层次2) = 1(开始编码); level2 <= 2(结束编码); level2++)
{
String s2 = level2 + "-";
for(int level3(层次3) = 1(开始编码); level3 <= 2(结束编码); level3++)
{
String s3 = level3 + "-";
for(int level4(层次4) = 1(开始编码); level4 <= 2(结束编码); level4++)
{
String s4 = String.valueOf(level4);
System.out.println("==>"+s1 + s2 + s3 + s4);
}
}
}
}
int c = CengCilength() //有几层 ,这个方法自己重写,比如"xx-xx-xx",这个方法就返回3
for(int level1(层次1) = 1(开始编码); level1 <= c(结束编码); level1++)
{
.......
.......
}
public class TraversalArray { public static void main(String[] args) {
traversal(new int[] { 3, 4, 5 });
} public static void traversal(int[] times) {
int[] pot = new int[times.length];
// Initialize the pointer
for (int i = 0; i < pot.length; i++) {
pot[i] = 1;
} while (true) {
// Assemble the code
String str = String.valueOf(pot[pot.length - 1]);
for (int i = pot.length - 2; i >= 0; i--) {
str = String.valueOf(pot[i]) + "-" + str;
}
System.out.println(str); // Counter++
int lvl = pot.length - 1; // Level pointer
while (++pot[lvl] > times[lvl]) {
pot[lvl] = 1;
if (--lvl < 0) {
return;
}
}
}
}
}运行结果:
1-1-1
1-1-2
1-1-3
1-1-4
1-1-5
1-2-1
1-2-2
1-2-3
1-2-4
1-2-5
1-3-1
1-3-2
1-3-3
1-3-4
1-3-5
1-4-1
1-4-2
1-4-3
1-4-4
1-4-5
2-1-1
2-1-2
2-1-3
2-1-4
2-1-5
2-2-1
2-2-2
2-2-3
2-2-4
2-2-5
2-3-1
2-3-2
2-3-3
2-3-4
2-3-5
2-4-1
2-4-2
2-4-3
2-4-4
2-4-5
3-1-1
3-1-2
3-1-3
3-1-4
3-1-5
3-2-1
3-2-2
3-2-3
3-2-4
3-2-5
3-3-1
3-3-2
3-3-3
3-3-4
3-3-5
3-4-1
3-4-2
3-4-3
3-4-4
3-4-5