我正在创建一个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
?
答案 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标准没有定义与float
或double
不同的Integer.NaN,因此在处理0或更小的输入时需要抛出错误
if (num <= 0) {
throw new IllegalArgumentException("Input number is is 0");
}
此外,您需要compare Strings正确使用equals
<{1}}