我的方法应该反转给定字符串的偶数索引。
使用更新的代码编辑:
public static String revEven(String inString)
{
String tempString = new String();
if (inString.length() <= 2)
return inString;
if (inString.length() == 3)
{
tempString += inString.charAt(2);
tempString += inString.charAt(1);
tempString += inString.charAt(0);
return tempString;
}
if (inString.length() % 2 == 0)
{
return tempString +=
revEven(inString.substring(0, inString.length() - 1)) +
inString.charAt(inString.length() - 1);
}
else
{
return tempString +=
inString.charAt(inString.length() - 1) +
inString.charAt(1) +
revEven(inString.substring(2, inString.length() - 2)) +
inString.charAt(inString.length() - 2) +
inString.charAt(0);
}
}
我在纸上运行了递归,它应该可以正常工作。当我输入 abcde
进行测试时,我会打印出 199cda
。它应该打印出 ebcda
。
好像是在打印内存地址之类的,但我似乎不明白为什么。
最佳答案
您编辑的代码返回的正是它应该返回的内容。
下面的代码:
return tempString +=
inString.charAt(inString.length() - 1) +
inString.charAt(1) +
revEven(inString.substring(2, inString.length() - 2)) +
inString.charAt(inString.length() - 2) +
inString.charAt(0);
对待第一个+
作为加法运算符,而不是串联运算符,将字符串的最后一个字符添加到第二个字符。在 Java 中,可以将 char 值相加以产生数字(在 Java 中,'a'+1
= 98
,char 的数值 b
)。
下面的代码通过连接到一个空字符串解决了这个问题,因此让 Java 编译器知道后面的一切都是连接,而不是加法。
return tempString += ""
+ inString.charAt(inString.length() - 1)
+ inString.charAt(1)
+ revEven2(inString.substring(2, inString.length() - 2))
+ inString.charAt(inString.length() - 2)
+ inString.charAt(0);
}
关于java - 递归方法中的堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188371/