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

Java二进制转十进制实现求助:字符串验证、异常处理及代码问题

修复后的二进制转十进制代码

首先需要定义自定义异常类BinaryFormatException:

public class BinaryFormatException extends Exception {
    public BinaryFormatException(String message) {
        super(message);
    }
}

然后是修复后的主类代码:

import java.util.Scanner;

public class Tester {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String binaryString;

        try {
            System.out.print("Please enter the binary number to convert: ");
            binaryString = input.nextLine();
            int decimalNumber = convertBinary(binaryString);
            System.out.println("Your number converted to decimal is " + decimalNumber + ".");
        } catch (BinaryFormatException e) {
            System.out.println(e.getMessage());
        } finally {
            input.close();
        }
    }

    static int convertBinary(String binaryString) throws BinaryFormatException {
        // 校验字符串是否仅包含0和1,若不合法则定位错误字符
        if (!binaryString.matches("[01]+")) {
            for (int i = 0; i < binaryString.length(); i++) {
                char c = binaryString.charAt(i);
                if (c != '0' && c != '1') {
                    throw new BinaryFormatException("Improper formatting for character at index " + i + ": '" + c + "'.");
                }
            }
        }

        int decimalNumber = 0;
        // 从二进制字符串末尾(最低位)开始计算十进制值
        for (int i = binaryString.length() - 1; i >= 0; i--) {
            char c = binaryString.charAt(i);
            int bit = c - '0';
            decimalNumber += bit * Math.pow(2, binaryString.length() - 1 - i);
        }
        return decimalNumber;
    }
}

关键修复说明

  • 自定义异常实现:新增BinaryFormatException类继承Exception,实现带消息的构造方法,满足异常抛出需求。
  • 传参与返回值修正:main方法中调用convertBinary时传入用户输入的字符串,接收返回的十进制结果并输出,替换原代码中错误的传参和输出逻辑。
  • 格式校验逻辑修复:颠倒原代码中matches的判断逻辑,当字符串不合法时遍历定位具体错误字符,抛出明确的异常信息。
  • 进制转换逻辑修复:从二进制字符串的最低位开始遍历,正确计算每一位的权重(2的幂次),累加得到正确的十进制数值,修复原代码中错误的变量操作和计算逻辑。
  • 资源管理:添加finally块关闭Scanner,避免资源泄漏。

内容的提问来源于stack exchange,提问作者uglyorgans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:50:51