public class TestAgrs {
public static void main(String [] agrs ) {
if(agrs.length<3||agrs.length>3) {
System.out.println(
"输入格式错误!应该输入:java TestAgrs \"n1\" \"op\" \"n1\"");
System.exit(0);
}
double d1 = 0,d2 = 0;
int sign = 0;//用于判断异常的出现,1代表出现
try{
d1 = Double.parseDouble(agrs[0]);
}
catch(NumberFormatException ax) {
System.out.println("你输入的第一个运算数格式不对,请输入正确的运算数!");
ax.printStackTrace();
sign = 1;
}
try {
d2 = Double.parseDouble(agrs[2]);
}
catch(NumberFormatException ax) {
System.out.println("你输入的第二个运算数格式不对,请输入正确的运算数!");
ax.printStackTrace();
sign = 1;
}
if(sign == 1) 
System.exit(0);
if(agrs[1].equals("+"))
System.out.println(d1+d2); 
else if(agrs[1].equals("-"))
System.out.println(d1-d2);
else if(agrs[1].equals("x"))
System.out.println(d1*d2);
else if(agrs[1].equals("/"))
try {
System.out.println(d1/d2);}
    catch(Exception ax) {
     System.out.println("除数不能为零!!!");
     ax.printStackTrace();
    }
else {
System.out.println("error operator" );
System.exit(0);
}
}
}
这是我写的用于两个浮点数简单的加减乘除的计算程序,可是有一点不太明白,就是为什么当我把除数设置为0后运行时我设置的第三个异常处理不能答应出来,屏幕上打印infinity,也就是下面这段代码打印不出来
else if(agrs[1].equals("/"))
try {
System.out.println(d1/d2);}
    catch(Exception ax) {
     System.out.println("除数不能为零!!!");
     ax.printStackTrace();
    }
刚刚学java,好多东西不太懂,麻烦指教一下,谢谢!!

解决方案 »

  1.   

    Infinity 就是溢出。对于除0,你应该程序里判断,这是程序员的职责。别指望系统异常处理。
      

  2.   

    我处理了啊,try {
    System.out.println(d1/d2);}
    catch(Exception ax) {
    System.out.println("除数不能为零!!!");
    ax.printStackTrace();
    }
    这段代码不就是的吗?可是就是打印不出来,当除数是0时??
      

  3.   

    我知道啊,就是NumberFormatException啊,我使用了啊???
      

  4.   


    这个出不了异常 0的话就是溢出!!!
    代码换掉!!!自己判断除数是否为零!!!
    if(d2==0.00){
    System.out.println("除数不能为零!!!");
    }else{
    System.out.println(d1/d2);
    }
      

  5.   


    public static strictfp  void main(String args[])  {

    int a=1;
    int b=0;
    try{ 
     a/b;
    }catch(Exception e){
    System.out.println("除数不能为0");
    } }
    输出 除数不能为0  没有问题 ~~
      

  6.   

    仔细看了下  好像是因为 double 的问题 
    double和float的被除数都可以为0的原因是java中有三个特殊的浮点类型,就是NAN,负无穷大和无穷大。用来表示浮点型操作出错或者是溢出的某些情况。比如负数的平方根就会是NAN
    所以你要明白 看起来是0 其实他不是0
      

  7.   

    大家可以看下我这段程序
    public class Test {
    public static void main(String [] agrs) {
    int i=1,j=0;
    try{
    int t = i/j;
    }
    catch(Exception ax) {
    System.out.println("除数不能为零!!!");
    ax.printStackTrace();
    }
    }
    }
    这里面的catch(Exception ax) {
    System.out.println("除数不能为零!!!");
    ax.printStackTrace();
    }
    就能被打印出来,可是为什么上面的就打印不了呢???
      

  8.   

    哦,我刚刚试验了一下,确实如此啊,太谢谢你了,终于明白自己问题出在哪了,呵呵。如果要解决这个问题的话可以用
    if(d2==0.00){
    System.out.println("除数不能为零!!!");
    }else{
    System.out.println(d1/d2);
    }
    这个办法来处理,有没有更好的办法呢?
      

  9.   

    首先声明  本人新手 
    如有错误  概不负责
    我自己的理解:整数 5/0 未定义它的值是多少,产生java.lang.ArithmeticException: / by zero异常
    而 5/0.0;这个是浮点数的运算,定义好的为无穷大,也就是Infinity,所以System.out.println(d1/d2);
    就打印出Infinity,而不会产生异常