对于我的任务,我必须能够递归地解压缩一个字符串,而不是for循环。我在尝试限制自己使用for循环时遇到了一些麻烦,如果我能得到一些帮助,我会很感激。接近尾声,我有一个for循环,我想知道是否有一种方法可以用其他东西删除它,仍然让我的程序做我打算做的事情
public class StringRec {
public static void main(String[] args) {
System.out.println("What text do you want to decompress?");
String compressedText = IO.readString();
System.out.println(decompress(compressedText));
}
public static String decompress(String compressedText) {
if (compressedText.length()<=1){
return compressedText;
}
String first="";
String rest="";
char c = compressedText.charAt(0);
if (Character.isLetter(c) == true) {
first = compressedText.substring(0,1);
rest = compressedText.substring(1);
return first + decompress(rest);
} else {
first = compressedText.substring(1,2);
rest = compressedText.substring(2);
int x = compressedText.charAt(0)-'0';
char y = compressedText.charAt(1);
String tst = "";
for(int i = 0; i < x; i++) {
tst = tst+y;
}
return tst + decompress(rest);
}
}
}
答案 0 :(得分:1)
使用while循环执行相同的操作。
int i = 0;
while(i < x) {
i++;
tst += y;
}
如果你不能完全使用循环,那就使用递归。
int i = 0;
public String recursiveAppend(String tst) {
if(i >= x) {
i = 0;
return tst;
}
else return recursiveAppend(tst + y);
}
如果你正在使用&gt; Java 1.5,然后使用String tst = new String(new char[x]).replace('\0', y);
。 (来自here)
答案 1 :(得分:0)
如果它是尾递归的话,递归到救援,奖励点:
String tst = repeat(y, x, "");
...
private String repeat(y, x, b) {
if (x == 0) {
return b;
}
return repeat(y, x - 1, b + y) ;
}