据我的调试结果看,如果你输入"*",系统会自动转为字符"a",所以会转到默认的情况。我把条件"*"改成了"a",就行了。不过这是为什么,就请高手说明了!
public class  MainParameters
{
public  static  void  main(String  args[])
{
int  x, y;
char  op;
String  str=" "; 
x =Integer.parseInt(args[0]);
y =Integer.parseInt(args[1]);
op=args[2].charAt(0);
switch(op)
{
   case  '+' : str=str+x+" + "+y+" = "+(x+y);  break;
   case  '-' : str=str+x+" - "+y+" = "+(x-y);  break;
   case  'a' : str=str+x+" * "+y+" = "+(x*y);  break;
   case  '/' : str=str+x+" / "+y+" = "+(x/y);  break;
   default   : System.out.println("不能识别的运算符 "+op);
   System.exit(0);
}
System.out.println(str);
}
}

解决方案 »

  1.   

    调用的时候加上双引号把*包起来就可以了,如下所示:
    java MainParameters 1 3 "*"
    原因还没搞清,可能是*有特殊含义,关注!
      

  2.   

    * 在Dos提示符下面将被解释成一个文件名字传到虚拟机。例如:你敲 dir * 就显示一些文件名字,同样 java MainParameters 3 4 * 里面的 * 也回被替换成一个文件名字(当前目录下第一个文件名)传入。 你的目录下面有A.class所以 arg[2]="A.class" charAt之后 op='A'.
      

  3.   

    如果你输入java MainParameters 3 4 ? 当前目录下面有一个单字符的文件比如B那么?也将被替换为B传入。这是问题的根本所在。
      

  4.   

    楼上说得有理,怪不得我这里产生,谢谢楼上不能识别的运算符 M我目录里第一个就是MainParameters.class这个类,看来是平台的兼容性问题,不知Linux会正常吗?
      

  5.   

    To advanced(超越):
    果然是高手,多谢指点!
      

  6.   

    "*"是dos命令甚至unix命令保留的字符
    所以当你当参数输入时系统会自动当命令处理
    也就是罗列出你当前路径的所有文件
    于是你的参数个数就是你当前路径的文件个数(当然在你的程序里是指args[2]以后的个数)
    而且参数顺序跟文件的排列顺序一至
    你可以把*号写在""双引号里面就可以了
    至于要彻底解决
    目前我也不清楚
    我以前也是遇到这样的情况的
    后来是跟用户讨论换另一个字符的
    如果可能,你也可以换另一个字符
      

  7.   

    同意 qybao(阿宝) advanced(超越) 的意见,我也测试过,确实如2位大虾所说
    如果你在你的程序里面加上
    for(int i=2;i<args.length;i++){
      System.out.println(args[i]);
    }//end for i在运行
    1 2 *你就知道了!祝你好运!