2013-03-19 3 views
2

Итак, вопрос прост. В приведенном ниже коде, когда я передаю аргумент командной строки как java CommandLineDemo 3 5 *, имена файлов в моем текущем каталоге перечислены. Проведя некоторые исследования в Google, я узнал, что мы должны поставить * как '*' в командной строке.Передача * в качестве аргумента командной строки в простом Java-калькуляторе

Мой вопрос, как может мой код будет изменен таким образом, что он принимает '*' в командной строке, и выполняет продукт из operand1 и operand2

class CommandLineDemo { 
    public static void main(String[] args) { 
     int operand1 = Integer.parseInt(args[0]); 
     int operand2 = Integer.parseInt(args[1]); 
     char theOperator = args[2].charAt(0); 
     System.out.print(args[0] + args[2] + args[1] + " = "); 
     switch(theOperator) { 
      case ('+'): 
       System.out.println(operand1 + operand2); break; 
      case ('-'): 
       System.out.println(operand1 - operand2); break; 
      case ('*'): 
       System.out.println(operand1 * operand2); break; 
      case ('/'): 
       System.out.println(operand1/operand2); break; 
      default: 
       System.out.println("Invalid Operator selected"); 
     } 
    } 
} 
+0

Попробуйте использовать "*" вместо этого. Кавычки удаляются автоматически – MadProgrammer

+0

@MadProgrammer спасибо за тонну .. –

+0

использование х вместо * :) – Suranga

ответ

1

Вы можете попробовать передать аргумент командной строки в виде одной строки (пример: «2 3 +») с помощью модифицированного кода ниже.

import java.util.Arrays; 

class CommandLineDemo { 

    public static void main(String[] args) { 

     String strArray = Arrays.toString(args); 
     strArray = strArray.replace("[", "").replace("]", "").replaceAll("[, ]", ""); 
     String[] splits = strArray.split(""); 

     int operand1 = Integer.parseInt(splits[1]); 
     int operand2 = Integer.parseInt(splits[2]); 
     char theOperator = splits[3].charAt(0); 

     System.out.print(splits[1] + " " + splits[3] + " " + splits[2] + " = "); 

     switch(theOperator) { 
      case ('+'): 
       System.out.println(operand1 + operand2); break; 
      case ('-'): 
       System.out.println(operand1 - operand2); break; 
      case ('*'): 
       System.out.println(operand1 * operand2); break; 
      case ('/'): 
       System.out.println(operand1/operand2); break; 
      default: 
       System.out.println("Invalid Operator selected"); 
     } 
    } 
} 

Использование & Результат выглядит следующим образом:

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 +" 
2 + 3 = 5 

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 -" 
2 - 3 = -1 

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 *" 
2 * 3 = 6 

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 /" 
2/3 = 0 

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 a" 
2 a 3 = Invalid Operator selected 

C:\Users\sarath_sivan\Desktop> 
0

* является мета символов в оболочке, что означает, что он имеет особое имея в виду. Поэтому вам нужно избежать этого с помощью \ Не нужно изменять код, а просто введите \* в среднем *

+0

да .. :(Любая помощь? –

+0

@MadProgrammer ?? –

+0

@Snacky Srikanth не мое решение не получается? – codeMan

0

Вам не нужно расширять программу. Передача * как '*' связана с тем, что оболочка (или, точнее, оболочка Linux, мало знает о Windows cmd: p) будет выполнять file name expansion, если вы передадите * напрямую, она будет расширена как все файлы в вашем текущем каталоге. '*' предотвратить это и передать * вашей программе в качестве аргумента командной строки.

+0

, но когда мой код скомпилирован, передача '' * ''возвращает значение по умолчанию в переключателе –

+1

@Snacky Он работает на моей коробке. Я использую 'java CommandLineDemo 3 5 '*''. Моя оболочка bash 4.1.2. Кстати, какая у вас среда? Linux или windows cmd? –

+0

Я использую Windows –

Смежные вопросы