有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)

有人能找出问题吗


共 (2) 个答案

  1. # 1 楼答案

    你应该改变这一点:

    for (int i = res.length; i >= 0; i ) 
    

    致:

    for (int i = res.length - 1; i >= 0; i ) 
                            ^^^
    

    为什么

    数组在Java中是基于零的。例如,如果你有一个大小为10的数组,那么索引将是0,1,2。。。9

    因此,如果你试图到达array[10](数组的.length),你会得到一个ArrayIndexOutOfBoundsException

  2. # 2 楼答案

    看起来ifor (int i = 0; !stack.isEmpty(); i++)toIntArr大于或等于res.length。将验证更改为

    for (int i = 0; i < res.length && !stack.isEmpty(); i++) {
        //...
    }
    

    另外,在toBase10方法中,需要更改i变量的上限:

    for (int i = res.length - 1; i >= 0; i ) {
        //...
    }