因此问题如下。您将创建一个将字符串作为包含所有数字的参数的方法,并且需要将该字符串转换为Integer。您必须使用递归解决方案来解决该问题。
我编写了以下代码,当我输入“ 1234”或“ 138775”时,它可以正常工作,但是一旦我输入一个包含0的数字,它就会返回一个奇怪的结果。
100、1001、101和12045分别返回10、11、110和1245。如上所述,当我向其发送“ 1234”或“ 14384”之类的代码时,该代码可以正常工作,但是一旦有零,它就会删除该零。
我尝试从Integer类(例如parse(int))将int转换为字符串,但结果却相同。
/**
* converts a string of numbers to an int
*
* @param String str: original string of numbers
* @return int recursiveStringInt: returns the int value of the string
*/
public static int recursiveStringInt(String str)
{
if(str.length() == 1)
return Integer.valueOf(str);
else
{
return Integer.valueOf(str.substring(0,1) + recursiveStringInt(str.substring(1)));
}
}
感谢你们的帮助!
请让我知道是否需要任何澄清。
答案 0 :(得分:1)
您的括号与您要执行的操作略有不同,因此逻辑需要一些工作。.您想要的是采用当前字符串的 last 字符,将其转换为一个整数,并将其添加到字符串前面乘以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
答案 1 :(得分:0)
尝试使用分而治之的解决方案
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;
}
}
答案 2 :(得分:0)
这是因为当您将054
之类的子字符串解析为int时,它将变成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));
}
}