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

