【发布时间】:2016-03-18 03:56:44
【问题描述】:
我正在尝试制作一个程序来解压缩使用 RLE 压缩的字符串。然而,解压程序必须以递归方式编写,没有循环,也没有在方法之外声明变量。下面是我迄今为止最接近的尝试,我能够解压缩压缩字符串的第一个“片段”(例如:4w、q、g、J、6y 等)。之后它就不会打印出其他任何东西,我无法理解为什么。非常感谢
public class StringRec{
public static void main(String[] a){
System.out.println("string: ");
String decomp = IO.readString();
System.out.println(decompress(decomp));
}
public static String decompress(String compressedText){
int count = compressedText.length();
String index = "";
if(count == 0){
return "";
}
我虽然做了一些不再调用解压方法的条件, 因为它们的条件是它们是字符串中的最后一块,所以在它们的部分解压缩后就完成了。自然,在调用解压缩调用的其他条件之后,将在运行时结束时发生调用。不知道为什么它不起作用。
else{
if(Character.isDigit(compressedText.charAt(0))){
String s = String.format("%0" + compressedText.charAt(0) + "d", 0).replace('0', compressedText.charAt(1));
index = s;
compressedText = compressedText.substring(2);
decompress(compressedText);
}
else if(Character.isDigit(compressedText.charAt(0)) && compressedText.length()==2){
String s2 = String.format("%0" + compressedText.charAt(0) + "d", 0).replace('0', compressedText.charAt(1));
index = s2;
}else if(Character.isLetter(compressedText.charAt(0))){
String s3 = Character.toString(compressedText.charAt(0));
index = s3;
compressedText = compressedText.substring(1);
decompress(compressedText);
}
else if(Character.isLetter(compressedText.charAt(0)) && compressedText.length()==1){
String s4 = Character.toString(compressedText.charAt(0));
index = s4;
}
return index;
}
}
我目前的猜测是它与 decompress 方法的调用方式有关,或者它与我如何安排在 decompress 方法被调用后返回的输出有关,但是我将无法解释字符串的第一部分如何始终如一地工作。
【问题讨论】:
标签: java recursion standard-library compression