当前位置:编程学习 > JAVA >>

(求组)根据给定的规则生成字符编码

以下代码是固定了四个层次之后的编码规则(格式如: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);
      }  
     }
  }
} --------------------编程问答-------------------- 比较偷懒的方法就是用递归或者迭代。非要用循环来做也可以,就是外层做层级循环,内层做某层次循环,用数组自行维护循环的状态。 --------------------编程问答--------------------
引用 1 楼 ldh911 的回复:
比较偷懒的方法就是用递归或者迭代。非要用循环来做也可以,就是外层做层级循环,内层做某层次循环,用数组自行维护循环的状态。


用数组自行维护循环的状态,是啥意思,麻烦具体点,谢谢了。 --------------------编程问答-------------------- 其实不建议真的用循环来干这种事情。。。建议还是用递归或者迭代吧,这样代码简洁清晰些。

大致思路如下:
1、先有一个静态数组,配置了每层级的最大值(结束编码);
2、然后有一个数组(假定命名为循环指针数组),来记录你在每一层次当前的循环指针,初始化的时候为全0;
3、外循环负责对循环指针数组的遍历,内循环负责对某个特定指针进行增长和结束编码判断,超界则复位该指针并增长外层循环;
4、直到外层循环结束。

这类算法有标准参考实现的,你尝试搜索下:用循环模拟迭代,类似这样的字眼。
--------------------编程问答--------------------
引用 3 楼 ldh911 的回复:
其实不建议真的用循环来干这种事情。。。建议还是用递归或者迭代吧,这样代码简洁清晰些。

大致思路如下:
1、先有一个静态数组,配置了每层级的最大值(结束编码);
2、然后有一个数组(假定命名为循环指针数组),来记录你在每一层次当前的循环指针,初始化的时候为全0;
3、外循环负责对循环指针数组的遍历,内循环负责对某个特定指针进行增长和结束编码判断,超界则复位该指针并增长外层循环;
4、……



好的,谢谢。 --------------------编程问答-------------------- 正则表达式 or 自动机 --------------------编程问答-------------------- 递归. --------------------编程问答-------------------- 我举个例子



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
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,