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
相关产品推荐
相关产品推荐

