2013-11-28 27 views
0

我遇到了一个有趣的问题。我创建了采取从命令行参数和提供做算术运算一个简单的java文件,为什么当传递*作为主要方法参数时会产生意想不到的结果?

e.g. java Test 2 3 5 + This gives output as 10 correctly 

但当我 java Test 2 3 * 它抛出NumberFormatException。然后,我查看了什么是获取通过参数的值,并看到文件夹中的所有文件名(我的java文件所在的地方)都以参数形式传递。

这是典型的情况吗?

我的代码是

class Test { 

    public static void main(String args[]) { 
     int sum = Integer.parseInt(args[0]); 
     for (int x = 1; x < args.length - 1; x++) { 
      int y = Integer.parseInt(args[x]); 

      if (args[args.length - 1].equals("+")) { 
       sum += y; 
      } else if (args[args.length - 1].equals("-")) { 
       sum -= y; 
      } else if (args[args.length - 1].equals("*")) { 
       sum *= y; 
      } else if (args[args.length - 1].equals("/")) { 
       sum /= y; 
      } 
     } 

     System.out.println(sum); 

    } 
} 
+5

您是否在unix-ish系统/环境中? '*'会被shell解释为通配符,并扩展到当前目录中的任何文件名,所以你实际上可能调用'java 2 3 file1 file2 file3 etc ...''有'java 2 3 \ *'会修复问题 –

+1

为了避免这种情况,您需要执行'java test 2 3'*'' –

+0

*不是一个数字。你正在尝试哟分析int –

回答

5

你的壳是做glob expansion。您可以通过引用来解决此问题:

java Test 2 3 '*' 
相关问题