如何修复类RLE程序中字符计数错误的问题
问题原因及解决方法
为什么A的计数是5?
你的代码逻辑里,每次进入for循环的i迭代时,会先执行count++,再判断字符是否相等。以A为例:
- z初始为0(对应第一个A),i从0开始:
- i=0:count变成1,字符相等,不进入if
- i=1:count变成2,字符相等,不进入if
- i=2:count变成3,字符相等,不进入if
- i=3:count变成4,字符相等,不进入if
- i=4:count变成5,此时字符是R,和A不等,触发输出,导致A的计数被错误算成5
除此之外,代码还有几个逻辑漏洞:
- 外层
while循环完全多余,会导致for循环重复执行多次 - 字符串末尾加空格的操作没必要,反而可能引入额外错误
- 最后一组字符的处理逻辑有问题,会出现遗漏输出的情况
修正后的代码
String x = "AAAARRRGGH"; int count = 1; // 每个字符至少出现一次,初始化为1 for (int i = 1; i < x.length(); i++) { // 对比当前字符与前一个字符 if (x.charAt(i) == x.charAt(i - 1)) { count++; } else { // 输出前一组的字符和计数 System.out.println(x.charAt(i - 1) + "" + count); count = 1; // 重置计数 } } // 输出最后一组字符(循环里不会处理到) System.out.println(x.charAt(x.length() - 1) + "" + count);
关键修改点
- 去掉冗余的
while循环和z变量,直接用i和i-1对比相邻字符,逻辑更清晰 count初始化为1,避免像原代码那样提前累加不属于当前组的字符- 循环从
i=1开始,跳过第一个字符的无效对比 - 循环结束后单独输出最后一组字符,解决原代码可能遗漏输出的问题
内容的提问来源于stack exchange,提问作者Dylan Andrews
相关产品推荐
相关产品推荐

