6

這個問題很簡單,但我錯過了一些非常基本的東西,無法捕捉它。請幫忙。 我正在寫一個簡單的計算器程序在命令行上使用。源代碼如下。 問題是,當我使用計算器作爲在Java程序的命令行中使用*

>java SwitchCalc 12 * 5 

它拋出爲輸入串中的「java.lang.NumberFormatException」:在語句「002.java」於argS [2]第二解析INT:

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); 
    } 
} 
+1

你可以嘗試打印所有的參數,然後再執行任何操作? –

+3

這不是用Java做的 - 它是你的shell進行通配符擴展。我猜你有兩個或多個文件,其中之一叫做'002.java',在你運行這個代碼的目錄中。 –

+0

我試過只是現在用以下代碼:'for(int i = 0; i

回答

6

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

就你而言,星號已被目錄中的所有文件的名稱取代,其中第一個似乎是002.java。嘗試將此字符串解析爲Integer會導致給定的異常。

通過將其包裝在"*"引號中,它被shell視爲文字,並直接傳遞給程序。根據您使用的外殼,您還應該能夠使用\*反斜槓來跳過星號。

另請參閱Wikipedia article about glob patterns