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

Java编写基础RLE程序遇逻辑错误,计数重置相关问题求助

RLE编码逻辑问题修复

问题根因

  • 字符拼接逻辑错位:当检测到字符变化时,错误地将新出现的不同字符和前序字符的计数拼接,实际应该拼接的是前一段连续重复的字符和对应计数
  • 末尾字符遗漏:循环结束后,最后一段连续字符没有触发拼接逻辑,会直接丢失

修正代码

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    
    System.out.println("Enter string for encoding: ");
    String uString = input.next();
    // 兼容空输入
    if (uString.length() == 0) {
        System.out.println("输入为空");
        return;
    }

    int count = 1;
    // 用StringBuilder替代String拼接,减少内存开销
    StringBuilder encoded = new StringBuilder();

    // 直接从索引1开始遍历,省去重复的i≠0判断
    for (int i = 1; i < uString.length(); i++) {
        if (uString.charAt(i) == uString.charAt(i - 1)) {
            count++;
        } else {
            // 拼接前一段连续字符和计数
            encoded.append(uString.charAt(i - 1)).append(count);
            count = 1;
        }
        // 保留原有调试日志
        System.out.println(uString.charAt(i) + "" + i + "" + count);
    }
    // 补充拼接最后一段连续字符的结果
    encoded.append(uString.charAt(uString.length() - 1)).append(count);

    System.out.println("Unencoded string's length: " + uString.length() + "\nEncoded string:" + encoded + ", encoded string's length: " + encoded.length());
  }
}

验证结果

输入示例AABCEDDDGHIIIII,运行后输出编码结果为A2B1C1E1D3G1H1I5,完全符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:06:01