这个问题很简单,但我在这里遗漏了一些非常基本的东西,无法捕捉到它。请帮忙。 我正在编写一个简单的计算器程序,可以在命令行中使用。源代码如下。 问题是当我使用计算器
时>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);
}
}
答案 0 :(得分:6)
<P class="sans" align="center"> <font size="80" color="#009900" >R</p> </font>
<p class="sans" align="center"> <font size="80" color="#ffff00" >A </p> </font>
<p class="sans" align="center"> <font size="80" color="#ff0000" >S </p> </font>
<p class="sans" align="center"> <font size="80" color="#009900" >T </p> </font>
<p class="sans" align="center"> <font size="80" color="#ffff00" >A </p> </font>
是一个对shell有特殊含义的通配符。它在被传递到程序之前就已经扩展了。
在您的情况下,星号已被目录中所有文件的名称替换,第一个文件似乎是*
。尝试将此字符串解析为Integer会导致给定的异常。
通过将其包装在002.java
引号中,它被shell视为文字,并按原样传递给程序。根据您使用的shell,您还应该能够使用"*"
反斜杠转义星号。