import java.io.*;
//import java.lang.String.*;
public class A{
   public static void main(String [] args){
    if(args.length==3){
     double a1=Double.parseDouble(args[0]);
     double a2=Double.parseDouble(args[2]);
     if(args[1].length()!=1){
       System.out.println("Unrecoghized operator"+args[1]);
        return;
     }    char operator=args[1].charAt(0);
    double result;
    switch(operator){
      case '+':result=a1+a2;break;
      case '*':result=a1*a2;break;
      case '-':result=a1-a2;break;
      case '/':result=a1/a2;break;
      default:
        System.out.println("Illegal operator");
        return;
     }
     System.out.println(args[0]+args[1]+args[2]+"="+result);
     }
     else
     System.out.println("MALFORMED Expression");
  }
}为什么 用乘法就不行了呢?显示MALFORMED Expression,,,其他的都运算通过。。实在不理解。

解决方案 »

  1.   

    *在cmd中是有特殊含义的,表示当前目录下的所有文件。所有是需要转义的。
    你可以这样来传递:
    java A 2 "*" 3
    这样估计也可以,我没试过:
    java A 2 \* 3
      

  2.   

    java A 2 "*" 3 正确java A 2 \* 3 这个是不行的,很遗憾
      

  3.   

    楼上说的是,而且还只能在cmd中执行,eclipse自带参数运行也不行,请高手指点!
      

  4.   

    请使用Java 的大数类的乘法函数,否则结果不正确。
      

  5.   


    受教了,谢谢。
    java A 2 "*" 3  这个是可以的,但是java A 2 \* 3是不行的。。
      

  6.   

    有Linux经验的人可能会比较好理解。
    比如,ls *
    实际上,这个*会被shell解释成当前目录下的文件列表(这个转换发生在执行ls命令之前),然后把这个列表作为参数传递给ls命令。
    也就是说,ls得到的是一串参数,而不是一个。
    和shell类似,*被cmd解释成当前目录下的参数。在bash中,\*与"*"具有一样的效果。所以我猜想在cmd中\*没准也可以。但是好像和我猜想的不太一样。
      

  7.   

    eclipse中当然不用转义了。
    因为将*解释成当前目录下的文件是cmd的功能,跟eclipse没关系。
    建议你将*换成x,这样比较好理解,也比较好操作。
      

  8.   

    头像很sexy,还有要有异常,除数是0的情况