首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这种方法不允许11-15的输入?

为什么这种方法不允许11-15的输入?
EN

Stack Overflow用户
提问于 2014-12-29 02:34:57
回答 1查看 165关注 0票数 2

这是破解第5版编码采访的代码--我是从https://code.google.com/p/ctci/source/browse/trunk/Java/Introduction/CompareBinaryToHex/CompareBinaryToHex.java?spec=svn18&r=3 (不想从书中上传几页的图片)得到的,这是代码

代码语言:javascript
运行
复制
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块),作者后来总结说,最好编写更灵活、更通用的代码,我同意这一点,这也是我对11-15基本输入的支持理由。比如说,如果你使用的是基数11,我认为convertToBase仍然应该能做到这一点,因为你在计算digitToValue的逻辑(A到F)后面的“A”(A)。她为什么不允许这些输入呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-29 02:40:03

因为很少有人需要一个基地(或http://en.wikipedia.org/wiki/Radix) 11,12,13,14或15计算器。需要注意的是,8是八进制,2是二进制,10是十进制,16是十六进制。我会进一步建议你明确地检查其中之一,

代码语言:javascript
运行
复制
if (base != 2 && base != 8 && base != 10 && base != 16) return -1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27682739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档