为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

www说 2021-12-18 15:32:31
所以问题如下。您将创建一个将字符串作为参数的方法,该字符串由所有数字组成,您需要将该字符串转换为整数。您必须使用递归解决方案来解决问题。我编写了以下代码,当我输入“1234”或“138775”时它工作得很好,但是一旦我输入一个包含 0 的数字,它就会返回一个奇怪的结果。100、1001、101 和 12045 分别返回 10、11、110 和 1245。如上所述,当我向它发送诸如“1234”或“14384”之类的东西时,代码工作得很好,但是一旦有零,它就会倾向于删除该零。我已经尝试了不同的 int 到 Integer 类的字符串转换,例如 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)));    }}谢谢你们的帮助!如果需要澄清,请告诉我。
查看完整描述

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


查看完整回答
反对 回复 2021-12-18
?
HUX布斯

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));

    }

}


查看完整回答
反对 回复 2021-12-18
?
倚天杖

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;

    }

}


查看完整回答
反对 回复 2021-12-18
  • 3 回答
  • 0 关注
  • 224 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号