簡體   English   中英

在Java程序中使用命令行中的*

[英]Using * in command line in a Java program

問題是微不足道的,但我在這里遺漏了一些非常基本的東西,無法捕捉到它。 請幫忙。 我正在編寫一個簡單的計算器程序,可以在命令行中使用。 源代碼如下。 問題是當我使用計算器時

>java SwitchCalc 12 * 5

它為args [2]解析第二個int的語句中的輸入字符串拋出'java.lang.NumberFormatException':“002.java”:

int value2 = Integer.parseInt(args[2])

后來我嘗試了以下,它的工作原理。

>java SwitchCalc 12 "*" 5
12 * 5 = 60

我錯過了什么?

/*
User will input the expression from command-line in the form:
>java SwitchCalc value1 op value2
where,
value1, and value2 are integer values
op is an operator in +, -, *, /, %
Program will evaluate the expression and will print the result. For eg.
>java SwitchCalc 13 % 5
3
*/

class SwitchCalc{
    public static void main(String [] args){
        int value1 = Integer.parseInt(args[0]),
            value2 = Integer.parseInt(args[2]),
            result = 0;

        switch(args[1]){
            case "+":
                result = value1 + value2;
                break;
            case "-":
                result = value1 - value2;
                break;
            case "*":
                result = value1 * value2;
                break;
            case "/":
                result = value1 / value2;
                break;
            case "%":
                result = value1 % value2;
                break;
            default:
                System.out.printf("ERROR: Illegal operator %s.", args[1]);
                break;
        }

        System.out.printf("%d %s %d = %d", value1, args[1], value2, result);
        //System.out.println(value1 + " " + args[1] + " " + value2 + " = " + result);
    }
}

*是一個對shell有特殊含義的通配符。 它甚至在傳遞給程序之前就已經擴展了。

在您的情況下,星號已被目錄中所有文件的名稱替換,第一個文件似乎是002.java 嘗試將此字符串解析為Integer會導致給定的異常。

通過將其包裝在"*"引號中,它被shell視為文字,並按原樣傳遞給程序。 根據您使用的shell,您還應該能夠使用\\*反斜杠轉義星號。

另請參閱Wikipedia關於glob模式的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM