You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复类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);

关键修改点

  1. 去掉冗余的while循环和z变量,直接用i和i-1对比相邻字符,逻辑更清晰
  2. count初始化为1,避免像原代码那样提前累加不属于当前组的字符
  3. 循环从i=1开始,跳过第一个字符的无效对比
  4. 循环结束后单独输出最后一组字符,解决原代码可能遗漏输出的问题

内容的提问来源于stack exchange,提问作者Dylan Andrews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:18:20