Java新手求助:如何不使用parseInt实现二进制转十进制
手动实现二进制转十进制并整合到你的代码中
要不用Integer.parseInt实现二进制转十进制,核心逻辑是逐位计算每一位的权重并累加:从二进制字符串的最左侧开始,每遍历一位就把当前十进制结果乘以2(相当于权重升级),再加上当前位的数字(0或1),最终得到十进制数。比如二进制"101"的计算过程是:0*2+1=1 → 1*2+0=2 → 2*2+1=5,简洁高效。
步骤1:实现自定义转换方法
先写一个静态方法完成转换逻辑:
private static int binaryToDecimal(String binaryString) { int decimal = 0; for (char c : binaryString.toCharArray()) { decimal = decimal * 2 + (c - '0'); } return decimal; }
步骤2:整合到现有代码中
替换原代码里依赖Integer.parseInt(binaryString, 2)的部分,同时优化输入验证逻辑(避免原代码循环验证的混乱),修改后的完整代码如下:
import java.util.Scanner; class BinaryToDecimal { public static void main(String args[]) { Scanner sc = new Scanner(System.in); String binaryString; char choice = 'Y'; try { do { System.out.print("Enter a binary number: "); binaryString = sc.nextLine(); boolean isValid = true; // 验证输入是否为合法二进制数 for (char c : binaryString.toCharArray()) { if (c != '0' && c != '1') { isValid = false; break; } } // 输入不合法则循环重新输入 while (!isValid) { System.out.print("Invalid input, enter a binary number: "); binaryString = sc.nextLine(); isValid = true; for (char c : binaryString.toCharArray()) { if (c != '0' && c != '1') { isValid = false; break; } } } // 调用自定义方法转换并输出结果 int decimal = binaryToDecimal(binaryString); System.out.println("The decimal number is: " + decimal); System.out.println("Continue using the calculator? Only input Y or N"); String ln = sc.next(); choice = ln.length() == 1 ? ln.charAt(0) : 'N'; // 处理输入后的换行符,避免下一次读取异常 if (sc.hasNextLine()) { sc.nextLine(); } } while (Character.toUpperCase(choice) == 'Y'); } catch (Exception e) { System.out.println("Invalid input"); } finally { sc.close(); } } // 自定义二进制转十进制方法 private static int binaryToDecimal(String binaryString) { int decimal = 0; for (char c : binaryString.toCharArray()) { decimal = decimal * 2 + (c - '0'); } return decimal; } }
关键修改说明
- 优化输入验证:改为先判断合法性,不合法则进入循环重新输入,逻辑更清晰
- 替换
Integer.parseInt(binaryString, 2)为自定义转换方法 - 增加
Character.toUpperCase(choice),支持小写y继续程序 - 添加
sc.close()关闭Scanner,避免资源泄漏
内容的提问来源于stack exchange,提问作者Qurthala
相关产品推荐
相关产品推荐

