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

Java命令行参数程序开发求助:进制转换功能实现疑问

嘿,我来帮你搞定这个Java命令行程序的问题!咱们一步步拆解,先解决前缀检查和数字提取的核心逻辑,再实现二进制转十进制的自定义方法,最后把整个程序整合起来。

第一步:处理命令行参数的前缀检查与数字提取

命令行参数是通过main方法的String[] args传入的,每个参数都是字符串。要处理带前缀的参数,思路很简单:

  • 用String.charAt(0)获取参数的第一个字符,判断是'b'还是'd'
  • 用String.substring(1)提取前缀后面的数字部分(注意要提前判断参数长度至少为2,避免空指针)

举个核心逻辑的小片段:

String arg = "b1010"; // 示例参数
char prefix = arg.charAt(0);
String numStr = arg.substring(1); // 得到"1010"
第二步:二进制转十进制的自定义实现

既然你已经知道Integer.toBinaryString()用于十进制转二进制,那咱们手动实现一个二进制转十进制的方法,完全满足你“自定义方法”的要求:

实现思路

从二进制字符串的左到右遍历每一位,每一位数字乘以2的(长度-1-当前索引)次方,最后累加所有结果。比如二进制1010的计算过程是:1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 10。

自定义方法代码

public static int binaryToDecimal(String binaryStr) {
    int decimalResult = 0;
    int strLength = binaryStr.length();
    
    for (int i = 0; i < strLength; i++) {
        char currentChar = binaryStr.charAt(i);
        // 先验证二进制字符的合法性
        if (currentChar != '0' && currentChar != '1') {
            throw new IllegalArgumentException("二进制字符串只能包含0和1");
        }
        // 把字符转成整数数字
        int digit = currentChar - '0';
        // 计算当前位的权重并累加
        decimalResult += digit * Math.pow(2, strLength - 1 - i);
    }
    return decimalResult;
}
第三步:完整的程序示例

把上面的逻辑整合起来,加上命令行参数遍历、异常处理(比如参数为空、前缀错误、非法数字等),形成可运行的完整程序:

public class PrefixNumberConverter {

    public static void main(String[] args) {
        // 先检查有没有传入参数
        if (args.length == 0) {
            System.out.println("请提供带前缀的整数参数,例如:b1010(二进制转十进制)或 d10(十进制转二进制)");
            return;
        }

        // 遍历处理每个命令行参数
        for (String arg : args) {
            try {
                convertAndPrint(arg);
            } catch (IllegalArgumentException e) {
                System.out.println("处理参数 '" + arg + "' 失败:" + e.getMessage());
            }
        }
    }

    private static void convertAndPrint(String arg) {
        // 验证参数长度至少为2(前缀+数字)
        if (arg.length() < 2) {
            throw new IllegalArgumentException("参数格式错误,必须是前缀(b/d)+ 数字");
        }

        char prefix = arg.charAt(0);
        String numPart = arg.substring(1);

        switch (prefix) {
            case 'b':
                // 二进制转十进制
                int decimalValue = binaryToDecimal(numPart);
                System.out.printf("二进制 %s → 十进制:%d%n", numPart, decimalValue);
                break;
            case 'd':
                // 十进制转二进制,用你熟悉的toBinaryString
                int decimalNum = Integer.parseInt(numPart);
                String binaryValue = Integer.toBinaryString(decimalNum);
                System.out.printf("十进制 %d → 二进制:%s%n", decimalNum, binaryValue);
                break;
            default:
                throw new IllegalArgumentException("不支持的前缀:'" + prefix + "',仅支持b(二进制转十进制)和d(十进制转二进制)");
        }
    }

    // 自定义的二进制转十进制方法
    private static int binaryToDecimal(String binaryStr) {
        int decimalResult = 0;
        int strLength = binaryStr.length();
        
        for (int i = 0; i < strLength; i++) {
            char currentChar = binaryStr.charAt(i);
            if (currentChar != '0' && currentChar != '1') {
                throw new IllegalArgumentException("二进制字符串 '" + binaryStr + "' 包含非法字符");
            }
            int digit = currentChar - '0';
            decimalResult += digit * Math.pow(2, strLength - 1 - i);
        }
        return decimalResult;
    }
}
测试运行示例

在命令行编译并运行:

javac PrefixNumberConverter.java
java PrefixNumberConverter b1010 d10 b1111

你会看到输出:

二进制 1010 → 十进制:10
十进制 10 → 二进制:1010
二进制 1111 → 十进制:15
额外小提示
  • 如果要处理更大的数字,可以把int换成long,避免整数溢出
  • 可以进一步优化输入验证,比如判断十进制数字部分是不是合法的整数(比如避免出现字母)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:52:12