6

Il problema è banale, ma mi mancano alcune cose di base qui e non riesco a prenderlo. Per favore aiuto. Sto scrivendo un semplice programma di calcolatrice con cui lavorare a linea di comando. Il codice sorgente è riportato di seguito. Il problema è quando uso la calcolatrice comeUtilizzo di * nella riga di comando in un programma Java

>java SwitchCalc 12 * 5 

getta un 'java.lang.NumberFormatException' per la stringa di input: "002.java" nella dichiarazione di analisi secondo int da args [2]:

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

Successivamente ho provato quanto segue, ha funzionato.

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

Cosa mi manca?

/* 
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

Provare a stampare tutti gli argomenti prima di eseguire qualsiasi cosa? –

+3

Questo non ha a che fare con Java: è la tua shell che esegue l'espansione con caratteri jolly. Immagino che tu abbia due o più file, uno dei quali è chiamato "002.java', nella directory da cui stai eseguendo questo codice. –

+0

Ho provato è solo ora con il seguente codice: 'for (int i = 0; i

risposta

6

* è un carattere jolly che ha un significato speciale per la shell. Viene espanso prima che venga persino passato al programma.

Nel tuo caso, l'asterisco è stato sostituito dai nomi di tutti i file nella directory, il primo dei quali sembra essere 002.java. Cercando di analizzare questa stringa su un numero intero si ottiene l'eccezione indicata.

Inserendolo nelle virgolette "*", viene considerato letterale dalla shell e semplicemente passato al programma così com'è. A seconda della shell che stai usando, dovresti anche essere in grado di uscire dall'asterisco con una barra rovesciata \*.

Vedere anche lo Wikipedia article about glob patterns.

Problemi correlati