由于某种原因,当字符串长度为零时,它不会出现在while循环中。有人可以帮我这个吗?
static String str1 = "";
public static void reverse(String str) {
while (str.length() > 0) {
str1 = str1 + str.charAt(str.length() - 1);
StringBuffer str_buf = new StringBuffer(str);
str = str_buf.deleteCharAt(str.length() - 1).toString();
reverse(str);
}
System.out.println("String is " + str1);
}
答案 0 :(得分:4)
将while
替换为if
if(str.length()>0)
更新
while
失败的原因是,在str.length()
变为0之后,它会到达递归的底部,并且控制返回到“更高”级别,其中str.length()
仍为1.所以它再次自称。
因此,对于while
,在它达到0之后,它将在1和0之间连续循环。
答案 1 :(得分:2)
您编码的方式是循环遍历整个字符串并递归调用该函数。因此,对于短字符串“abcd”,第一次通过将使用“abc”,“ab”和“a”调用reverse。对“abc”的反向调用将以“ab”和“a”调用reverse。如果你递归调用函数,那么你不需要像@ sanjeev-mk建议的while循环,而只需要if作为退出条件。
答案 2 :(得分:0)
我相信有一个更合适的代码来递归打印字符串反转:
public void reverseStringPrint(String inputString, int index){
if (index < (inputString.lenght() - 1))
reverseStringPrint(inputString, index + 1);
System.out.print(inputString.charAt(index);
}
使用index = 0运行。
为了在输出处获得反向字符串(不仅打印它),您可以这样做:
public String reverseString(String inputString, int index){
String restOfTheString = "";
if (index < (inputString.lenght() - 1))
restOfTheString = reverseStringPrint(inputString, index + 1);
return charAt(index) + restOfTheString;
}