首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 命令行參數處理誤區:main args 只能一次性接收,交互需用 Scanner/System.in

     編輯:程式設計疑難解答

錯誤代碼分析

public static void main(String[] args) {
    // args 是啟動時一次性傳入的數組,長度固定
    do {
        switch(args[i]) { ... } // 死循環、越界、邏輯錯誤
        i++;
    } while(i != -1);
}

三大錯誤

  1. 誤以為 args 可交互輸入:`args` 在 JVM 啟動時由操作系統一次性注入,**運行期間不可變、不可追加**。
  2. 死循環 `do-while`**:無退出條件,`i` 不斷增長導致 `ArrayIndexOutOfBoundsException`。
  3. 未校驗 `args.length`**:直接訪問 `args[i]`、`args[i+1]` 必崩。

正確模式

模式一:純命令行參數(批處理風格)

public static void main(String[] args) {
    if (args.length < 1) { usage(); return; }
    String cmd = args[0];
    switch (cmd) {
        case "max": doMax(); break;
        case "insert": if (args.length>=2) doInsert(Integer.parseInt(args[1])); break;
        // ...
    }
}

模式二:運行時交互輸入(Scanner)

Scanner sc = new Scanner(System.in);
while (true) {
    System.out.print("> ");
    String line = sc.nextLine();
    String[] parts = line.split("\\s+");
    // 解析 parts[0] 命令及參數...
    if ("exit".equals(parts[0])) break;
}

總結

`args` 只適合**啟動配置**,交互式菜單必須用 `Scanner`/`BufferedReader` 讀 `System.in`。參數解析建議用成熟庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved