gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:10:28 24 4
gpt4 key购买 nike

这是 Cracking the Coding Interview 第 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"));
}
}

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

最佳答案

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

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

关于java - 为什么该方法不允许来自 11-15 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com