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