为什么该方法不允许 11-15 的输入



这是来自破解编码访谈第 5 版的代码我从https://code.google.com/p/ctci/source/browse/trunk/Java/Introduction/CompareBinaryToHex/CompareBinaryToHex.java?spec=svn18&r=3(不想从书中拍摄和上传几页的照片)这是代码

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"));
    }
}

基本上,这个类中的一个方法比较BinToHex,接受二进制数和十六进制数的字符串表示,并返回它们是否相等(十进制值)。它使用方法转换到基本从该基数转换为十进制。我的问题是对于 convertToBase 方法,为什么允许在 2-9 和 16 范围内的基本输入,但是11-15 的基本输入不是吗?(范围 2-9 和 16 中的基本输入不会进入返回 -1 if 块)Gayle,作者后来总结说,最好编写更灵活和通用的代码,我同意这一点,这也是我允许11-15个基本输入的论点背后的原因。 假设您正在使用 base 11。我相信convertToBase 仍然应该为此工作,因为您正在计数到"A",它仍然应该在 digitToValue 中的逻辑(范围"A"到"F")后面工作。她有理由不允许这些输入吗?

因为很少有人需要基数(或基数)11、12、13、14 或 15 计算器。请务必注意,以 8 为基数是八进制,以 2 为基数是二进制,以 10 为基数是十进制,以 16 为基数是十六进制。我会更进一步,建议你明确检查它是其中之一,

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

相关内容

  • 没有找到相关文章

最新更新