如何在 Java 中执行算术异常捕获块?
How to execute Arithmetic Exception catch block in Java?
这是代码片段:
public void actionPerformed(ActionEvent e){
int i1,i2;
try{
if(e.getSource()==b1){
.
.
.
else if(e.getSource()==b4){
double i1,i2;
i1=Integer.parseInt(t1.getText());
i2=Integer.parseInt(t2.getText());
i1=i1/i2;
l7.setText(i1+"");
}
else if(e.getSource()==b5){
i1=Integer.parseInt(t1.getText());
i2=Integer.parseInt(t2.getText());
i1=i1%i2;
l7.setText(i1+"");
}
}
catch(ArithmeticException ex2){
l7.setText("Debugging?");
JOptionPane.showMessageDialog(null,"Divide by zero exception!!");
//*WHY THIS SECTION IS NEVER BEING EXECUTED AFTER PERFORMING A DIVIDE BY ZERO i.e. ARITHMETIC EXCEPTION!*
}
catch(Exception ex){
JOptionPane.showMessageDialog(null,"Enter Values First!!");
}
}
JRE 从不执行算术异常 catch 语句,为什么?
是的,它正在处理它,但它没有产生我期望它产生的输出!
它会在我的 Java 应用程序上自动显示 "Infinity" & "NaN"!
谢谢!
检查这些代码行:
} else if (e.getSource() == b4) {
double i1, i2; // Comment this line to make it work like you need
i1 = Integer.parseInt(t1.getText());
i2 = Integer.parseInt(t2.getText());
i1 = i1 / i2;
l7.setText(i1 + "");
}
您已将 i1 和 i2 重新声明为双精度。 Double 类型定义 Infinity and NaN 的内置值。这就是您的代码未执行 ArithmeticException catch 块的原因。
只需注释 double i1, i2;
行即可使其按您的需要工作。
Update
如果要显示错误消息,只需勾选:
} else if (e.getSource() == b4) {
double i1, i2;
i1 = Integer.parseInt(t1.getText());
i2 = Integer.parseInt(t2.getText());
if(i2==0){
throw new ArithmeticException("Cannot divide by zero");
}
i1 = i1 / i2;
l7.setText(i1 + "");
}
希望对您有所帮助!
是的! Double 和 float 有它们自己内置的无限值。您的代码中可能存在一些我不知道的其他问题。
检查这些编辑:
else if(e.getSource()==b4){
double i1,i2;
i1= Integer.parseInt(t1.getText());
i2= Integer.parseInt(t2.getText());
if(i1!=0 && i2 == 0){
throw new ArithmeticException();
}
else if(i2 == 0 && i1 == 0) {
throw new ArithmeticException();
}
i1= i1/i2;
l7.setText(i1+"");
}
这 throw new ArithmeticException();
将强制您的代码执行您愿意执行的部分!
此外,检查这个 link:https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html
希望对您有所帮助!
这是代码片段:
public void actionPerformed(ActionEvent e){
int i1,i2;
try{
if(e.getSource()==b1){
.
.
.
else if(e.getSource()==b4){
double i1,i2;
i1=Integer.parseInt(t1.getText());
i2=Integer.parseInt(t2.getText());
i1=i1/i2;
l7.setText(i1+"");
}
else if(e.getSource()==b5){
i1=Integer.parseInt(t1.getText());
i2=Integer.parseInt(t2.getText());
i1=i1%i2;
l7.setText(i1+"");
}
}
catch(ArithmeticException ex2){
l7.setText("Debugging?");
JOptionPane.showMessageDialog(null,"Divide by zero exception!!");
//*WHY THIS SECTION IS NEVER BEING EXECUTED AFTER PERFORMING A DIVIDE BY ZERO i.e. ARITHMETIC EXCEPTION!*
}
catch(Exception ex){
JOptionPane.showMessageDialog(null,"Enter Values First!!");
}
}
JRE 从不执行算术异常 catch 语句,为什么?
是的,它正在处理它,但它没有产生我期望它产生的输出! 它会在我的 Java 应用程序上自动显示 "Infinity" & "NaN"! 谢谢!
检查这些代码行:
} else if (e.getSource() == b4) {
double i1, i2; // Comment this line to make it work like you need
i1 = Integer.parseInt(t1.getText());
i2 = Integer.parseInt(t2.getText());
i1 = i1 / i2;
l7.setText(i1 + "");
}
您已将 i1 和 i2 重新声明为双精度。 Double 类型定义 Infinity and NaN 的内置值。这就是您的代码未执行 ArithmeticException catch 块的原因。
只需注释 double i1, i2;
行即可使其按您的需要工作。
Update
如果要显示错误消息,只需勾选:
} else if (e.getSource() == b4) {
double i1, i2;
i1 = Integer.parseInt(t1.getText());
i2 = Integer.parseInt(t2.getText());
if(i2==0){
throw new ArithmeticException("Cannot divide by zero");
}
i1 = i1 / i2;
l7.setText(i1 + "");
}
希望对您有所帮助!
是的! Double 和 float 有它们自己内置的无限值。您的代码中可能存在一些我不知道的其他问题。
检查这些编辑:
else if(e.getSource()==b4){
double i1,i2;
i1= Integer.parseInt(t1.getText());
i2= Integer.parseInt(t2.getText());
if(i1!=0 && i2 == 0){
throw new ArithmeticException();
}
else if(i2 == 0 && i1 == 0) {
throw new ArithmeticException();
}
i1= i1/i2;
l7.setText(i1+"");
}
这 throw new ArithmeticException();
将强制您的代码执行您愿意执行的部分!
此外,检查这个 link:https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html
希望对您有所帮助!