这是来自破解编码访谈第 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;