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

时间:2018-10-30 00:57:40

标签: java string recursion methods integer

因此问题如下。您将创建一个将字符串作为包含所有数字的参数的方法,并且需要将该字符串转换为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)));
    }
}

感谢你们的帮助!

请让我知道是否需要任何澄清。

3 个答案:

答案 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));
    }
}