当前位置: 代码迷 >> J2SE >> 如此简单的一个错误捕获如何捕获不了
  详细解决方案

如此简单的一个错误捕获如何捕获不了

热度:61   发布时间:2016-04-23 20:36:28.0
如此简单的一个异常捕获怎么捕获不了
刚刚学习java,写了一个加减乘除的简单程序,有两个捕获,出问题的捕获是对除法--除数为0的捕获,为何却一直捕获不了;程序很简单,就是不知道为什么?
//利用命令行参数 做计算器
public class TestCal
{
public static void main(String[] args)
{
if(args.length < 3)
{
System.out.println("input parameter number is under 3");
System.exit(-1);
}
double d1=0,d2=0;
try
{
d1 = Double.parseDouble(args[0]); //parseDouble是一个static函数,故直接用类名就可以调用
d2 = Double.parseDouble(args[2]);
}catch(NumberFormatException NE)
{
System.out.println("input parameter include string!");
NE.printStackTrace();
System.exit(-1);
}
double Result = 0;

try
{
if(args[1].equals("+"))
Result = d1 + d2;
else if(args[1].equals("-"))
Result = d1 - d2;
else if(args[1].equals("×"))
Result = d1 * d2;
else if(args[1].equals("/")) //此种情况下,d2为0  下面的catch却不执行 捕获不到 ?????
Result = d1 / d2;
else
{
System.out.println("the secaond paramter shoulde be operator");
System.exit(-1);
}
}catch(ArithmeticException AE)  //除数为0捕获
{
System.out.println("divisor is 0!");
AE.printStackTrace();
System.exit(-1);
}
System.out.println(args[0]+args[1]+args[2]+ " = " + Result);
}
}

下面是程序执行时截图:

------解决方案--------------------
		System.out.println(1.0 / 0);//打印"Infinity"
System.out.println(-1.0 / 0);//打印"-Infinity"
System.out.println(0.0 / 0.0);//打印"NaN"

Infinity是无穷大的意思。
这个是java算术的一个机制。
------解决方案--------------------
15.17.2. Division Operator /
The result of a floating-point division is determined by the rules of IEEE 754 arithmetic:

    If either operand is NaN, the result is NaN.
    If the result is not NaN, the sign of the result is positive if both operands have the same sign, and negative if the operands have different signs.
    Division of an infinity by an infinity results in NaN.
    Division of an infinity by a finite value results in a signed infinity. The sign is determined by the rule stated above.
    Division of a finite value by an infinity results in a signed zero. The sign is determined by the rule stated above.
    Division of a zero by a zero results in NaN; division of zero by any other finite value results in a signed zero. The sign is determined by the rule stated above.
    Division of a nonzero finite value by a zero results in a signed infinity. The sign is determined by the rule stated above.

------解决方案--------------------
double中0可以作为除数.
------解决方案--------------------
结果也告诉你可以这么做,结果是无穷.这迎合了数学的极限概念。
  相关解决方案