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
相关产品推荐
相关产品推荐

