Java 在将字符串转换为Int的递归问题上遇到问题

Java 在将字符串转换为Int的递归问题上遇到问题,java,string,recursion,methods,integer,Java,String,Recursion,Methods,Integer,因此,问题如下。您将创建一个方法,该方法将字符串作为由所有数字组成的参数,并且需要获取该字符串并将其转换为整数。您必须使用递归解决方案来解决该问题 我已经编写了以下代码,当我输入“1234”或“138775”时,它工作正常,但一旦我输入一个包含0的数字,它就会返回一个奇怪的结果 100、1001、101和12045分别返回10、11、110和1245。如上所述,当我发送诸如“1234”或“14384”之类的内容时,代码工作正常,但一旦出现零,它就会倾向于删除该零 我尝试过整数类中不同的int-t

因此,问题如下。您将创建一个方法,该方法将字符串作为由所有数字组成的参数,并且需要获取该字符串并将其转换为整数。您必须使用递归解决方案来解决该问题

我已经编写了以下代码,当我输入“1234”或“138775”时,它工作正常,但一旦我输入一个包含0的数字,它就会返回一个奇怪的结果

100、1001、101和12045分别返回10、11、110和1245。如上所述,当我发送诸如“1234”或“14384”之类的内容时,代码工作正常,但一旦出现零,它就会倾向于删除该零

我尝试过整数类中不同的int-to-string转换,比如parse(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)));
    }
}
谢谢你们的帮助


如果需要澄清,请告诉我

尝试使用分权解决方案

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;
    }
}
publicstaticvoidmain(字符串[]args){
System.out.println(递归stringint(“12034”,0));
}
公共静态int recursiveStringInt(字符串str,int pow)
{
如果(str.length()<1)
返回0;
其他的
{
int temp=Integer.valueOf(str.substring(str.length()-1))
*(int)数学功率(10.0,1.0*pow);
temp+=recursiveStringInt(str.substring(0,str.length()-1),pow+1);
返回温度;
}
}

这是因为当您将像
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));
    }
}

你的括号有点偏离了你要做的事情,逻辑需要做一些工作。。您需要的是获取当前字符串的最后一个字符,将其转换为整数,并将其添加到字符串前面的转换乘以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

考虑
System.out.println(Integer.valueOf(“0123”)我认为你的代码应该被划分并使用10次幂,你应该在代码审查时问这些问题,而不是堆栈溢出。“奇怪的结果”是什么?知道这一点可以帮助我们解决这个问题。我试图将其拆分,以使OP更容易理解,尽管你的更好。没问题,不过需要更多的咖啡;-)