我正在尝试创建一个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));*/
}
}
答案 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
。尝试使用char
将String
转换为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
在界限之间,你的功能应该正常工作。
答案 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}}在使用之后,就在它超出范围之前。