在Java中将任何基数转换为十进制

时间:2015-01-17 14:00:35

标签: java base-conversion

我正在尝试使用此方法将任何基数中的数字转换为十进制。

public static int convertToDecimal(String str, int base){

        int v = 0;
        int total = 0;
        int pow = 0;
        str = str.toUpperCase();
        for(int i = str.length(); i > -1; i--){
            char c = str.charAt(i);
            if (c >= '0' && c <= '9') {
                v = c - '0';
            }else if (c >= 'A' && c <= 'Z'){
                v = 10 + (c - 'A');
            }
            total += v * Math.pow(base,pow);
            pow++;
        }
        return total;
    }

但我最终得到的数组超出了绑定异常。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

正如@HovercraftFullOfEels已经注意到的那样。字符串是零基础的。您从i=str.length()开始抛出ArrayIndexOutOfBoundsException,因为最大可能的索引是i=str.length()-1

public static int convertToDecimal(String str, int base) {
    int v = 0;
    int total = 0;
    int pow = 0;
    str = str.toUpperCase();
    for (int i = str.length() - 1; i >= 0; i--) {
        char c = str.charAt(i);
        if (c >= '0' && c <= '9')
            v = c - '0';
        else if (c >= 'A' && c <= 'Z')
            v = 10 + (c - 'A');
        total += v * Math.pow(base, pow);
        pow++;
    }
    return total;
}