Java数字基数计算器(即基数10到基数5)
我正在尝试制作一个计算器,可以计算和转换不同基数的数字。现在我相信这有一个很小的问题,但我无法找到它为我的生活。代码如下:
package basecalculator;
import java.util.Scanner;
public class BaseCalculator {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("num?");
int number = input.nextInt();
int numLen = String.valueOf(number).length();
int[] res = new int[numLen];
toIntArr(number, res);
for (int i = 0; i < res.length; i++) {
System.out.print(res[i] + " ");
}
System.out.println(toBase10(res));
}
public static void toIntArr(int n, int [] res){
Stack stack = new Stack();
while(n > 0) {
stack.push(n % 10);
n = n / 10;
}
for (int i = 0; !stack.isEmpty(); i++) {
res[i] = stack.pop();
}
}
public static int toBase10(int [] res) {
int sum = 0;
for (int i = res.length; i >= 0; i--) {
sum += res[i] * Math.pow(10, i); //here is where it freaks out.
}
return sum;
}
这就是错误:
run:
num?
456
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at basecalculator.BaseCalculator.toBase10(BaseCalculator.java:49)
at basecalculator.BaseCalculator.main(BaseCalculator.java:28)
4 5 6 Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
有人能找出问题吗
# 1 楼答案
你应该改变这一点:
致:
为什么
数组在Java中是基于零的。例如,如果你有一个大小为10的数组,那么索引将是0,1,2。。。9
因此,如果你试图到达
array[10]
(数组的.length
),你会得到一个ArrayIndexOutOfBoundsException
# 2 楼答案
看起来
i
在for (int i = 0; !stack.isEmpty(); i++)
中toIntArr
大于或等于res.length
。将验证更改为另外,在
toBase10
方法中,需要更改i
变量的上限: