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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:43:27