2011-09-16 87 views
5

我正嘗試從命令行運行java計算器應用程序。參數如下:操作符操作數1操作數2。我可以成功運行+和 - 的java程序。
例如
java的計算值+ 2 4
java的計算值 - 10 4
Java命令行參數。使用*作爲乘法的參數

但是當我嘗試運行
的java * 2 5

System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);

給出輸出:
.classpath
.project
.settings

我發現通過試驗和錯誤,使用單引號('*')解決了我的問題。 所以我現在有兩個問題。
1.是否用正確的方式來使用單引號? (java calc'*'2 5)
2. java命令行中*的含義是什麼? (我試圖找到這個互聯網上,但並沒有發現太大的幫助)

感謝, PUNIT

+0

在網上搜索「文件名擴展」。是的,單引號星號。 –

回答

13

它不是Java,它的外殼(cmd,如果你使用的是Windows)您使用的是將*解釋爲「當前目錄中的所有文件和文件夾」。

因此,當你寫:

java calc * 2 5 

你會真正給你的程序如下參數:

java calc file_1 file_2 ... file_n 2 5 

file_1 ... file_n在當前目錄下的所有文件(和文件夾))。

如果您不希望shell將所需的所有文件(如您已經注意到的)解釋爲引用該參數,那麼您的shell將會解釋爲*

+1

它應該是「(double quoute)not」(單引號) –

+1

@ reader_1000:好點,因爲這是一個「windows-only」問題!(其他shell需要其他字符引用或轉義它。例如'sh ''使用'\ *'。) – dacwe

+0

我很抱歉沒有提及我使用的是哪個操作系統,我正在使用windows,而在windows cmd中使用雙引號(「)仍然給我同樣的錯誤。使用單引號(')雖然工作正常。正如@dacwe正確地指出,不同平臺的轉義序列是不同的。感謝球員的答案和意見:) – Gadenkan

1

如果您引用您的命令參數,shell將不會將它們擴展爲文件名。 '*'對java沒有特別的意義,它是處理這個輸入的shell。