我的任务是创建一个递归方法makeDecimal,当传递一个数字(由String表示)及其基数时,将数字转换为基数10.您将需要使用该方法Integer.parseInt(str)
.(提示:使用子串.)此方法采用a String
并返回它的整数形式.
例如,Integer.parseInt("21");
将返回int 21.
以下是makeDecimal如何工作的一些示例:
makeDecimal("11", 2)
将返回3.
makeDecimal("100", 4)
将返回16.
这是我的尝试:
public static double makeDecimal(String number, int base){ int len = number.length(); double f = 0; if(len <= 0) return 0; else{ makeDecimal(number,base); double temp = Integer.parseInt(number.substring(len - 1, len + 1)); f = f + temp * Math.pow(3, len-1); } len--; return f; }
但是,我收到"溢出错误",我不知道它是否写得正确.
您正在使用与传入的完全相同的参数进行递归.因此,调用本身将以相同的方式递归,直到堆栈溢出.这不是递归应该如何工作的.相反,您需要弄清楚如何在当前调用中执行一个问题,然后递归以解决较小的问题.
在你的代码中,你甚至不清楚你正在使用什么逻辑.(计算3 len
-1有什么意义?)试试这个:
如果输入字符串的长度为0,则答案为0(您正确的那部分)
否则,取最后一位数字并在当前基数中解析它.然后答案是该值加上base
所有值的值乘以但不包括输入的最后一位数.(提示:这是使用递归的好地方.)
您应该能够将该描述转换为适当的方法调用和使用substring()
.
哦,还有一件事:这里没有理由使用double
值.只需坚持使用int
变量.你不需要Math.pow()
.