Java 为什么该方法不允许来自11-15的输入?

Java 为什么该方法不允许来自11-15的输入?,java,binary,base,hex,Java,Binary,Base,Hex,这是破解编码访谈第5版的代码 这是我从你那里得到的 (不想拍摄并上传书中几页的照片) 这是密码 public class CompareBinaryToHex { public static int digitToValue(char c) { if (c >= '0' && c <= '9') { return c - '0'; } else if (c >= 'A

这是破解编码访谈第5版的代码 这是我从你那里得到的 (不想拍摄并上传书中几页的照片) 这是密码

public class CompareBinaryToHex {
    public static int digitToValue(char c) {
            if (c >= '0' && c <= '9') {
                    return c - '0';
            } else if (c >= 'A' && c <= 'F') {
                    return 10 + c - 'A';
            } else if (c >= 'a' && c <= 'f') {
                    return 10 + c - 'a';
            }
            return -1;
    }

    public static int convertToBase(String number, int base) {
            if (base < 2 || (base > 10 && base != 16)) return -1;
            int value = 0;
            for (int i = number.length() - 1; i >= 0; i--) {
                    int digit = digitToValue(number.charAt(i));
                    if (digit < 0 || digit >= base) {
                            return -1;
                    }
                    int exp = number.length() - 1 - i;
                    value += digit * Math.pow(base, exp);
            }
            return value;
    }

    public static boolean compareBinToHex(String binary, String hex) {
            int n1 = convertToBase(binary, 2);
            int n2 = convertToBase(hex, 16);
            if (n1 < 0 || n2 < 0) {
                    return false;
            } else {
                    return n1 == n2;
            }
    }

    public static void main(String[] args) {
            System.out.println(compareBinToHex("111001011", "1CB"));
    }
}
public类CompareBinaryToHex{
公共静态整数数字值(字符c){
如果(c>='0'&&c='A'&&c='A'&&c 10&&base!=16))返回-1;
int值=0;
对于(int i=number.length()-1;i>=0;i--){
整数位数=数字值(数字字符(i));
如果(数字<0 | |数字>=基数){
返回-1;
}
int exp=number.length()-1-i;
值+=数字*数学功率(基数,经验);
}
返回值;
}
公共静态布尔compareBinToHex(字符串二进制,字符串十六进制){
int n1=转换基(二进制,2);
int n2=转换器状态(十六进制,16);
如果(n1<0 | | n2<0){
返回false;
}否则{
返回n1==n2;
}
}
公共静态void main(字符串[]args){
系统输出打印LN(compareBinToHex(“111001011”,“1CB”);
}
}
基本上,这个类中的一个方法compareBinToHex接受二进制数和十六进制数的字符串表示,并返回它们是否相等(十进制值)。它使用convertToBase方法将该基数转换为十进制。 我的问题是对于ConvertBase方法,为什么允许基本输入在2-9和16之间,但是
来自11-15的基本输入不是?(范围为2-9和16的基本输入不会进入返回-1 if块)Gayle,作者后来总结说,最好编写更灵活、更通用的代码,我同意这一点,这也是我允许11-15个基本输入的理由。如果你在11号基地工作。我相信ConvertBase仍然可以实现这一点,因为您正在计算“A”,它仍然可以在digitToValue中的逻辑(范围“A”到“F”)后面工作。她不允许这些输入有什么原因吗?

因为很少有人需要基数为11、12、13、14或15的计算器。需要注意的是,8进制是八进制,2进制是二进制,10进制是十进制,16进制是十六进制。我会更进一步,建议你明确地检查一下

if (base != 2 && base != 8 && base != 10 && base != 16) return -1;

谢谢,这很有道理。假设这个ConvertBase方法可以在11-15基础上使用。这个方法可以在11-15基础上使用,是的。事实上,如果你用z代替f,用z代替f,它适用于所有36的数字。这就是Character.MAX_基数为36的原因。