3 回答
TA贡献1777条经验 获得超10个赞
你的括号有点偏离你想要做的事情,逻辑需要一些工作..你想要的是获取当前字符串的最后一个字符,将其转换为整数,并将其添加到字符串的前面乘以 10。
int recursiveStringInt(String str) {
int length = str.length()
if(length == 1)
return Integer.valueOf(str);
else
{
int temp = Integer.valueOf(str.substring(length-1)) + ( 10 * recursiveStringInt(str.substring(0,length-1)));
return temp;
}
}
“8”的小情况导致仅执行第一个块。
“83”的下一个情况导致 temp = 3 + (10 * 8) = 83
“103”的下一种情况导致 temp = 3 + (10 * (0 + (10 * 1))) = 103
TA贡献1876条经验 获得超6个赞
这是因为当你解析一个像054int这样的子字符串时,它会变成54.
试试这个代码:-
public static int recursiveStringInt(String str) {
return str.length() == 1
? Integer.valueOf(str)
: (int) (Integer.parseInt(str.substring(0, 1)) * Math.pow(10, str.length() - 1)) + recursiveStringInt(str.substring(1));
}
我用过这个逻辑:-
105 = 1*100 + 0*10 + 5*1
编辑:如果你不理解三元运算符,这里是 if-else 版本:-
public static int recursiveStringInt(String str) {
if (str.length() == 1) {
return Integer.valueOf(str);
} else {
return (int) (Integer.parseInt(str.substring(0, 1)) * Math.pow(10, str.length() - 1)) + recursiveStringInt(str.substring(1));
}
}
TA贡献1828条经验 获得超3个赞
尝试使用分压解决方案
public static void main(String[] args) {
System.out.println(recursiveStringInt("12034", 0));
}
public static int recursiveStringInt(String str, int pow)
{
if(str.length() < 1)
return 0;
else
{
int temp = Integer.valueOf(str.substring(str.length() -1))
* (int) Math.pow(10.0, 1.0 * pow);
temp += recursiveStringInt(str.substring(0, str.length() -1), pow + 1);
return temp;
}
}
添加回答
举报
