java - 从十进制转换为十六进制

标签 java algorithm

我编写了一个 Java 程序,该程序应该将小数从 1 到 256 转换为十六进制,但是当我尝试使用大于 256 的小数时问题就来了,之后我开始得到不正确的结果。 这是我的代码:

public class Conversion {

public static void main(String[] args) {

    System.out.printf("%s%14s", "Decimal", "Hexadecimal");

    for(int i = 1; i <= 300; i++) {
        System.out.printf("%7d          ", i);
        decimalToHex(i);
        System.out.println();
    }

}

private static void decimalToHex(int decimal) {
    int count;
    if(decimal >= 256) {
        count = 2;
    } else {
        count = 1;
    }
    for (int i = 1; i <= count; i++) {
        if(decimal >= 256) {
            returnHex(decimal / 256);
            decimal %= 256;
        }

        if(decimal >= 16) {
            returnHex(decimal / 16);
            decimal %= 16;
        }

        returnHex(decimal);

        decimal /= 16;
    }
}

private static void returnHex(int number) {
    switch(number) {
        case 15:
            System.out.print("F");
            break;
        case 14:
            System.out.print("E");
            break;
        case 13:
            System.out.print("D");
            break;
        case 12:
            System.out.print("C");
            break;
        case 11:
            System.out.print("B");
            break;
        case 10:
            System.out.print("A");
            break;
        default:
            System.out.printf("%d", number);
            break;
    }
}

}

这是我得到的结果样本:

254              FE
255              FF
256              100
257              111
264              199
266              1AA
271              1FF
272              1100
273              1111

注意:我刚刚开始学习 java,所以尽可能保持简单。谢谢

最佳答案

如果 decimal 小于比较值,您只是忘记打印出零值。当显式打印出这些零时,您也不再需要 count 变量:

private static void decimalToHex(int decimal) {
    if (decimal >= 256) {
        returnHex(decimal / 256);
        decimal %= 256;
    } else {
        System.out.print("0");
    }
    if (decimal >= 16) {
        returnHex(decimal / 16);
        decimal %= 16;
    } else {
        System.out.print("0");
    }
    returnHex(decimal);
    decimal /= 16;
}

当然,这也会改变小值的输出。它打印 000、001、...

关于java - 从十进制转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737852/

相关文章:

java - java如何定位JAR文件?

java - Jolokia 防止 Tomcat 关闭

java - JScrollPane 内的 JList setMimimumSize()

java - 环绕字符中的字符

java - Android 应用程序强制关闭,没有显示任何错误

java - 如何有效地在网格上选取一条穿过某些点的线

c - 链表不在C中添加元素

algorithm - 从邻接表表示中删除重复顶点和自循环的图形算法

c++ - 2个旋转立方体之间的碰撞检测

javascript - 滚动算法——改进数据的获取和显示