Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:递归地将字符串转换为Int?_Java_String_Recursion_Int - Fatal编程技术网

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

Java:递归地将字符串转换为Int?,java,string,recursion,int,Java,String,Recursion,Int,我试图创建一个Java程序,将字符串递归地转换为整数。这是我目前所拥有的,但它给了我一个错误,“线程中的异常”main“java.lang.NumberFormatException”。该方法应该以字符串的形式接受一个数字,然后遍历每个位置。通过每次迭代,它将单个数字转换为整数,并将其添加到x。最后,假设x的字符串数为整数形式 尝试更改 integer=Integer.parseInt("numb.charAt(index)"); 进入 原始行尝试在字符串“numb.charAt(index

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

尝试更改

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

原始行尝试在字符串
“numb.charAt(index)”
中查找一个数字,该字符串不包含任何数字

同样,将
索引+
更改为
索引+1
甚至
++index
,因为
索引+
在这种情况下不起作用(它只会在使用后,在超出范围之前增加
索引。

integer=Integer.parseInt(numb.charAt(index));
不起作用,因为
charAt()
返回一个
char
,而
parseInt
需要一个
String
。请尝试使用
字符将该
char
转换为
字符串。toString(c)


即使方法正确,即:

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开始,一路走到Begging索引,同时你也错过了主通话中的打印声明

因为每次迭代都要将“次数”增加10倍,所以必须从字符串的最后一个索引开始

例如: 123=1*100+2*10+3*1

您的问题不是递归,而是您使用的算法。

添加

integer = Integer.parseInt(numb.substring(index, index +  1)); //
index++;
而不是:

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

并从
返回intconvert(numb,index++,times*10)中删除
++
++
它不是递增传递的
索引

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

int integer = numb.charAt(index) - '0';
剩下的就是确保
integer
在边界之间,并且您的函数应该可以正常工作


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

中,您传递的是不可解析的字符串。删除
numb.charAt(index)周围的引号
。为什么每个人都突然实现了所有通过简单迭代更好地实现的东西的递归版本?(我知道,这是本学期的早期,他们刚刚学习了递归,认为它很酷,不理解什么时候是和不合适的。尽管如此:grrrrrrrr.End rant。)我已经被揭露了。这只是一个帮助我理解递归的练习。这段代码实际上没有实际用途,我相信简单的迭代可以很容易地解决这个问题。numb.charAt(index))返回一个图表,谢谢你的提醒。有什么增加x的建议吗?我必须理解这个方法的目的,因为现在我不明白为什么不调用Integer.parseInt(string_,它表示一个数字),你描述问题的方式让我觉得不需要递归,一个简单的循环就可以了。真的没有理由。这只是我一本书中的一个练习,帮助我通过练习问题来理解递归。我明白你想要完成什么吗?是的,你做到了!非常感谢。
integer = Integer.parseInt(numb.substring(index, index +  1)); //
index++;
integer=Integer.parseInt("numb.charAt(index)"); 
int integer = numb.charAt(index) - '0';