在Java中获得数字异常的倒数

时间:2014-10-20 05:16:17

标签: java swing exception-handling

我正在创建一个Java swing计算器。我想获得给定数字的倒数。所以,如果我输入0,它应该打印出一条错误信息。

这是我的代码:

public class Calculator extends JFrame implements ActionListener {
    double num=0, num2=0;
    String operator;
    JButton bReciprocal=new JButton("1/x");
    JTextField result=new JTextField("0", 25);

    public void actionPerformed(ActionEvent e) {
        String command=e.getActionCommand();
        if(command=="1/x") {
            try {
                num=1/num;
                result.setText(Double.toString(num));
            }
            catch(ArithmeticException ae) {
                result.setText("Math Error");
                num=0;
            }
        }
    }
}

但是,如果我将0作为输入,我得到的是infinity。这段代码有什么问题?如何让它显示"数学错误"而不是infinity

2 个答案:

答案 0 :(得分:2)

1.0 / 0.0(双打除法)返回无穷大。

您甚至可以看到Double和Float类中POSITIVE_INFINITY的定义是:

/**
 * A constant holding the positive infinity of type
 * <code>double</code>. It is equal to the value returned by
 * <code>Double.longBitsToDouble(0x7ff0000000000000L)</code>.
 */
public static final double POSITIVE_INFINITY = 1.0 / 0.0;

/**
 * A constant holding the positive infinity of type
 * <code>float</code>. It is equal to the value returned by
 * <code>Float.intBitsToFloat(0x7f800000)</code>.
 */
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;

如果要抛出ArithmeticException,则除以整数:1/0。

因此,如果您正在使用双打,则无需捕获该异常。只需添加num != 0.0的支票即可。

顺便说一句,您应该将if(command=="1/x")更改为if(command.equals("1/x"))

答案 1 :(得分:1)

由于整数算术的IEEE标准没有定义与floatdouble不同的Integer.NaN,因此在处理0或更小的输入时需要抛出错误

if (num <= 0) {
 throw new IllegalArgumentException("Input number is is 0");
}

此外,您需要compare Strings正确使用equals <{1}}