Java 在将字符串转换为Int的递归问题上遇到问题
因此,问题如下。您将创建一个方法,该方法将字符串作为由所有数字组成的参数,并且需要获取该字符串并将其转换为整数。您必须使用递归解决方案来解决该问题 我已经编写了以下代码,当我输入“1234”或“138775”时,它工作正常,但一旦我输入一个包含0的数字,它就会返回一个奇怪的结果 100、1001、101和12045分别返回10、11、110和1245。如上所述,当我发送诸如“1234”或“14384”之类的内容时,代码工作正常,但一旦出现零,它就会倾向于删除该零 我尝试过整数类中不同的int-to-string转换,比如parse(int),但结果相同Java 在将字符串转换为Int的递归问题上遇到问题,java,string,recursion,methods,integer,Java,String,Recursion,Methods,Integer,因此,问题如下。您将创建一个方法,该方法将字符串作为由所有数字组成的参数,并且需要获取该字符串并将其转换为整数。您必须使用递归解决方案来解决该问题 我已经编写了以下代码,当我输入“1234”或“138775”时,它工作正常,但一旦我输入一个包含0的数字,它就会返回一个奇怪的结果 100、1001、101和12045分别返回10、11、110和1245。如上所述,当我发送诸如“1234”或“14384”之类的内容时,代码工作正常,但一旦出现零,它就会倾向于删除该零 我尝试过整数类中不同的int-t
/**
* 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)));
}
}
谢谢你们的帮助
如果需要澄清,请告诉我 尝试使用分权解决方案
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;
}
}
publicstaticvoidmain(字符串[]args){
System.out.println(递归stringint(“12034”,0));
}
公共静态int recursiveStringInt(字符串str,int pow)
{
如果(str.length()<1)
返回0;
其他的
{
int temp=Integer.valueOf(str.substring(str.length()-1))
*(int)数学功率(10.0,1.0*pow);
temp+=recursiveStringInt(str.substring(0,str.length()-1),pow+1);
返回温度;
}
}
这是因为当您将像054
这样的子字符串解析为int时,它会变成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));
}
}
你的括号有点偏离了你要做的事情,逻辑需要做一些工作。。您需要的是获取当前字符串的最后一个字符,将其转换为整数,并将其添加到字符串前面的转换乘以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考虑
System.out.println(Integer.valueOf(“0123”)代码>我认为你的代码应该被划分并使用10次幂,你应该在代码审查时问这些问题,而不是堆栈溢出。“奇怪的结果”是什么?知道这一点可以帮助我们解决这个问题。我试图将其拆分,以使OP更容易理解,尽管你的更好。没问题,不过需要更多的咖啡;-)