You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现十进制与二进制、十六进制互转,十六进制转换功能编写遇阻

完整实现代码

我已经帮你补全了十进制转十六进制、十六进制转十进制的两个功能,同时调整了菜单逻辑,代码可直接运行:

package java_project_gabriel;

import java.util.Scanner;

public class BinaryToDecimal {
    // 原有方法:十进制转二进制
    public String toBinary(int n) {
        if (n == 0) {
            return "0";
        }
        String binary = "";
        while (n > 0) {
            int rem = n % 2;
            binary = rem + binary;
            n = n / 2;
        }
        return binary;
    }

    // 原有方法:二进制转十进制
    public int binaryTodecimal(int i) {
        int n = 0;
        for (int pow = 1; i > 0; pow *= 2, i /= 10)
            n += pow * (i % 10);
        return n;
    }

    // 新增方法:十进制转十六进制
    public String decimalToHex(int n) {
        if (n == 0) {
            return "0";
        }
        // 十六进制字符对照表
        char[] hexChars = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        String hex = "";
        while (n > 0) {
            int rem = n % 16;
            hex = hexChars[rem] + hex;
            n = n / 16;
        }
        return hex;
    }

    // 新增方法:十六进制转十进制,支持大小写字母输入
    public int hexToDecimal(String hex) {
        int decimal = 0;
        // 统一转大写处理,兼容小写输入
        hex = hex.toUpperCase();
        for (int i = 0; i < hex.length(); i++) {
            char c = hex.charAt(i);
            int value;
            if (c >= '0' && c <= '9') {
                value = c - '0';
            } else if (c >= 'A' && c <= 'F') {
                value = 10 + (c - 'A');
            } else {
                throw new IllegalArgumentException("非法十六进制字符:" + c);
            }
            decimal = decimal * 16 + value;
        }
        return decimal;
    }


    public static void main(String[] args) {
        int answer2 = 0;
        String answer;
        final int info = 10;
        Scanner kb = new Scanner(System.in); // 把Scanner提到循环外,避免重复创建资源
        for (int i = 0; i < info; i++) {
            System.out.println("==================================");
            // 补充菜单提示
            System.out.println("1. 十进制转二进制");
            System.out.println("2. 二进制转十进制");
            System.out.println("3. 十进制转十六进制");
            System.out.println("4. 十六进制转十进制");
            System.out.println("5. 退出程序");
            System.out.print("Enter your choice: ");
            answer = kb.next();

            switch (answer) {
                case "1": // 十进制转二进制
                    System.out.print("Enter a decimal number: ");
                    answer2 = kb.nextInt();
                    BinaryToDecimal decimalToBinary = new BinaryToDecimal();
                    String binary = decimalToBinary.toBinary(answer2);
                    System.out.println("The binary representation is: " + binary);
                    break;

                case "2": // 二进制转十进制
                    System.out.print("Enter a binary number: ");
                    answer2 = kb.nextInt();
                    BinaryToDecimal bd = new BinaryToDecimal();
                    int n = bd.binaryTodecimal(answer2);
                    System.out.println("The decimal representation is: " + n);
                    break;

                case "3": // 新增:十进制转十六进制
                    System.out.print("Enter a decimal number: ");
                    answer2 = kb.nextInt();
                    BinaryToDecimal dth = new BinaryToDecimal();
                    String hex = dth.decimalToHex(answer2);
                    System.out.println("The hexadecimal representation is: " + hex);
                    break;

                case "4": // 新增:十六进制转十进制
                    System.out.print("Enter a hexadecimal number: ");
                    String hexStr = kb.next();
                    BinaryToDecimal htd = new BinaryToDecimal();
                    int decimal = htd.hexToDecimal(hexStr);
                    System.out.println("The decimal representation is: " + decimal);
                    break;

                case "5": // 退出选项调整为5,避免和新功能冲突
                    System.out.println("Goodbye");
                    kb.close(); // 关闭资源
                    System.exit(0);
            }
        }
    }
}

功能说明

  • 十六进制输入支持大小写,输入a和A都会被正确识别
  • 输入非法十六进制字符会抛出异常提示,你也可以根据需要自行添加异常捕获逻辑做更友好的提示
  • 我把原来的Scanner对象移到了循环外,避免重复创建浪费资源,退出前也加了资源关闭逻辑

内容的提问来源于stack exchange,提问作者G switch 99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:45:03