【发布时间】:2018-12-12 08:46:23
【问题描述】:
我被指派为我的 Java 班级完成一项任务。它基本上是一个运行长度编码程序,它会遍历输入的字符串并对其进行压缩,(例如:aaabbb 变为 a4b3)
流程:
我的代码遍历输入字符串中的每个字符并检查原始字符是否等于下一个字符。如果它为真,它会增加计数并最终连接计数和原始字母。如果原始字母不等于下一个字符 - 它从 1 开始计数并启动一个新的 for 循环。如果 for 循环中的字符等于位置 i 中的字符,则它会增加计数,直到下一个字母不等于前一个字母。重复此过程,直到读取输入中的所有字符。
我尝试编写以下代码:
import java.util.Scanner;
class RLE {
RLE() {
Scanner sc = new Scanner(System.in);
String input = sc.next();
int count = 0;
for (char c : input.toCharArray()) {
if (input.charAt(0) == c) {
count++;
input = input.charAt(0) + Integer.toString(count);
}
else {
count = 1;
for (int i = 0; i < input.length(); i++) {
if (c == input.charAt(i)) {
count++;
}
}
input = input.concat(c + Integer.toString(count));
}
}
System.out.println(input);
}
}
示例
这是我的以下输入:aaabbbccc
实际输出:a3b1b2b3c1c2c3
预期输出:a3b3c3
有人可以解释一下我做错了什么吗?我尝试用不同的方法重做代码,但没有成功。我最好的猜测是原始输入字符串被扩展,因此扩展了原始 for 循环,但这也可能是错误的。非常感谢!
【问题讨论】:
标签: java loops compression