这个Java程序为什么输入字母时,不运行catch里的内容,而是运行if的内容啊

importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;importstaticjavax.swing.J... import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import static javax.swing.JFrame.*;
class zilei extends JFrame implements ActionListener{
JTextField tf1=new JTextField(10);
JTextField tf2=new JTextField(10);
JTextField tf3=new JTextField(10);
JTextField tf4=new JTextField(10);
double a,b,c;
zilei(int x,int y,int w,int h){
init("求一元二次方程");
setBounds(x,y,w,h);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(String s){
this.setTitle(s);
tf4.setEditable(false);
setLayout(new FlowLayout());
add(tf1);
add(tf2);
add(tf3);
add(tf4);
tf1.addActionListener(this);
tf2.addActionListener(this);
tf3.addActionListener(this);
}
public void actionPerformed(ActionEvent ee){

try{
a=Double.parseDouble(tf1.getText());
b=Double.parseDouble(tf2.getText());
c=Double.parseDouble(tf3.getText());
}
catch(Exception e){
tf1.setText("");
tf2.setText("");
tf3.setText("");
tf4.setText("请输入实数!");
}
if(a==0&&b==0)
tf4.setText("无解!");
else if(b*b-4*a*c<0)
tf4.setText("无解!");
else if(a==0&&b!=0){
double x=c/b;
tf4.setText("x="+x);
}
else if(b*b-4*a*c>=0){
double x1=(-b+Math.sqrt(b*b-4*a*c))/(2*a);
double x2=(-b-Math.sqrt(b*b-4*a*c))/(2*a);
tf4.setText("x1="+x1+","+"x2="+x2);
}

}
}

public class hanshu {
public static void main(String args[]){
new zilei(300,300,150,150);
}

}
展开
 我来答
云中游民
2012-05-18 · TA获得超过602个赞
知道小有建树答主
回答量:697
采纳率:33%
帮助的人:616万
展开全部
你既然catch了异常就说明异常已被处理,下面的代码自然就可以运行,你可以试试去掉try/catch让其他类处理这个异常,下面就不运行了。
想实现你想要的效果就在catch的末尾加上 return; 终止代码的执行。
更多追问追答
追问
如果处理了异常,不是应该在tf4里输出“请输入实数!”吗?而结果是“出错”
追答
你下面不是又给tf4设值了吗,把 请输入实数!覆盖掉了,结果应该是“无解”之类的吧,“出错”是哪里冒出来的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhaiweiwei6
2012-05-18 · TA获得超过201个赞
知道小有建树答主
回答量:432
采纳率:0%
帮助的人:200万
展开全部
给你提供一思路:
1.刚刚定义完abc以后,想办法加句代码看到abc的值,叫做刚刚定义完的值
2.在try中的a=Double.parseDouble(tf1.getText());语句之前加代码,看到abc的值,叫做转换之前的值,
3.在try中的每一句转换之后加代码,看到abc的值,叫做转换顺利完成,转换之后的值;
4.在catch中所有语句之前加代码,看到“转换没有顺利完成,出现异常了”,然后加代码,看到abc的值,叫做转换失败以后abc的值。

这样一目了然。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaiye747
2012-05-18 · 超过21用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:49.2万
展开全部
java可以自动数据类型转换,因为字符char是可以自动转换成int类型的,所以也就能转换成double类型的
追问
这是String类型啊
追答
我知道你这个问题了,其实是走了catch。是这样的,当你输入字母的时候,在a=Double.parseDouble(tf1.getText());的地方就抛出了异常,进入catch,但是执行完catch,就继续往下执行了,这个时候a,b,c没有赋值,所以初始值都为0,就满足了你if的第一个条件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xdldwj
2012-05-18 · TA获得超过138个赞
知道答主
回答量:65
采纳率:0%
帮助的人:43.7万
展开全部
catch里面应该写的是对异常的处理,出现异常的时候才会执行。
更多追问追答
追问
可是出现异常时却实现了if 啊
追答
catch(Exception e){
e.printStackTrace();
}
catch的时候把异常打印出来就可以了,你把catch里面的代码移到外面试一下呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fylsh
2012-05-18 · TA获得超过950个赞
知道小有建树答主
回答量:1472
采纳率:0%
帮助的人:1046万
展开全部
会运行catch,也会运行if
追问
那出现异常时为什么不实现catch ,反而实现if 呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式