Java终端输入异常:命令行参数匹配失败问题排查
问题分析与修复方案
哈哈,这个问题太经典了!我刚学Java的时候也栽过这个跟头😅
核心问题:字符串比较用错了运算符
你代码里的if(args[1] == "Insertion" || args[1] == "Merge")这行是问题根源——在Java里,==用来比较对象的内存引用地址,而不是字符串的实际内容。
当你在命令行输入"Insertion"时,JVM会创建一个新的字符串对象存到args[1]里;而你代码里写的"Insertion"是字符串字面量,存在常量池里。这两个是不同的对象实例,所以==判断会返回false,自然进不了对应的分支。
修复代码
把==换成Java专门用来比较字符串内容的equals()方法就行,建议把字面量放在前面(避免空指针风险):
public static void main(String[] args) throws IOException, InsertionAndMergeException, Exception { if( args.length < 2 ) { System.out.println("Use: <path> <algorithm> "); System.exit(1); } // 用equals()比较字符串内容,字面量在前避免NPE if("Insertion".equals(args[1]) || "Merge".equals(args[1])){ // 你的测试逻辑代码 testWithComparisonFunction(...); } else { System.out.println("Algorithm not found. Use: [ Insertion | Merge ]"); } }
额外小技巧
如果想让程序对大小写不敏感(比如用户输入"insertion"或者"MERGE"也能匹配),可以用equalsIgnoreCase():
if("Insertion".equalsIgnoreCase(args[1]) || "Merge".equalsIgnoreCase(args[1])){ // 逻辑代码 }
内容的提问来源于stack exchange,提问作者Zeno Raiser
相关产品推荐
相关产品推荐

