日期:2014-05-20  浏览次数:20875 次

java关于异常处理的问题
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,好多东西不太懂,麻烦指教一下,谢谢!!

------解决方案--------------------
探讨

引用:
Infinity 就是溢出。

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

我处理了啊,try {
System.out.println(d1/d2);}
catch(Exception ax) {
System.out.println("除数不能为零!!!");
ax.printStackTrace(……

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