Java:递归地将字符串转换为Int?

时间:2014-02-03 23:08:39

标签: java string recursion int

我正在尝试创建一个Java程序,以递归方式将String转换为Integer。这是我现在所拥有的,但它给了我一个错误,“线程中的异常”主“java.lang.NumberFormatException”。该方法应该以字符串的形式接收一个数字,然后遍历每个位置。通过每次迭代,它将单个数字转换为整数并将其添加到x。到最后,假设x具有整数形式的字符串数。

import java.util.Scanner;

public class Problem{ public static int x=0; public static int integer; public static int intconvert(String numb,int index,int times){ if(index==numb.length()){ return x; } else{ integer=Integer.parseInt("numb.charAt(index)"); // x+=integer*times; //add int and multiply it return intconvert(numb, index++, times*10); // } } public static void main(String[] args){ Scanner scan=new Scanner(System.in); System.out.print("Enter the String digit: "); String number=scan.nextLine(); intconvert(number, 0, 1); /* System.out.println(number.charAt(0)); System.out.println(number.charAt(1)); System.out.println(number.charAt(2));*/ } }

5 个答案:

答案 0 :(得分:1)

即使方法是正确的,即:

public static int intconvert(String numb, int index, int times) {
        if (index == numb.length()) { return x; }
        integer = Integer.parseInt(String.valueOf(numb.charAt(index))); //
        x += integer * times; // add int and multiply it
        return intconvert(numb, index++, times * 10); //

    }

你仍然会得到一个StackOverFlow异常,因为你增加x的方式,它永远不会进入停止状态。

如果我理解你想做什么,解决方案是:

public class Cenas {

    public static int x = 0;
    public static int integer;

    public static int intconvert(String numb, int index, int times) {
        integer = Integer.parseInt(Character.toString(numb.charAt(index))); //
        x += integer * times; // add int and multiply it
        if (index == 0) { return x; }
        return intconvert(numb, --index, times * 10); //

    }

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        System.out.print("Enter the String digit: ");
        String number = scan.nextLine();
        System.out.println(intconvert(number, number.length() - 1, 1));
}

从重量较轻的algarism开始,按照你的方式前往开始索引,你也错过了主要电话的打印声明。

因为每次迭代都会将“时间”递增10次,所以必须开始吃掉字符串的最后一个索引。

实施例: 123 = 1 * 100 + 2 * 10 + 3 * 1

你的问题不是递归,而是你正在使用的算法。

答案 1 :(得分:0)

该行

integer=Integer.parseInt(numb.charAt(index));

无法使用,因为charAt()会返回char,而parseInt则需要String。尝试使用charString转换为Character.toString(c)

Integer.parseInt(Character.toString(numb.charAt(index)))

答案 2 :(得分:0)

添加

integer = Integer.parseInt(numb.substring(index, index +  1)); //
index++;

而不是:

integer=Integer.parseInt("numb.charAt(index)"); 

++ index++移除return intconvert(numb, index++, times * 10); index,{{1}}未通过{{1}}。

答案 3 :(得分:0)

数字在其ascii值中是连续的,因此为了将char转换为int,您可以执行以下操作:

int integer = numb.charAt(index) - '0';

剩下的就是确保integer在界限之间,你的功能应该正常工作。

顺便说一句,我会删除静态全局变量。如果您只是将它们作为参数传递,那么您的解决方案将是“纯粹的”,如副作用免费或referentially transparent

答案 4 :(得分:-2)

尝试更改

integer=Integer.parseInt("numb.charAt(index)");

integer=Integer.parseInt(numb.substring(index, index + 1));

原始行尝试在字符串"numb.charAt(index)"中找到一个不包含任何数字的数字。

同样,将index++更改为index + 1甚至++index,因为index++在这种情况下无效(仅增加index 1}}在使用之后,就在它超出范围之前。