这个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);
}
} 展开
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);
}
} 展开
展开全部
你既然catch了异常就说明异常已被处理,下面的代码自然就可以运行,你可以试试去掉try/catch让其他类处理这个异常,下面就不运行了。
想实现你想要的效果就在catch的末尾加上 return; 终止代码的执行。
想实现你想要的效果就在catch的末尾加上 return; 终止代码的执行。
更多追问追答
追问
如果处理了异常,不是应该在tf4里输出“请输入实数!”吗?而结果是“出错”
追答
你下面不是又给tf4设值了吗,把 请输入实数!覆盖掉了,结果应该是“无解”之类的吧,“出错”是哪里冒出来的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你提供一思路:
1.刚刚定义完abc以后,想办法加句代码看到abc的值,叫做刚刚定义完的值
2.在try中的a=Double.parseDouble(tf1.getText());语句之前加代码,看到abc的值,叫做转换之前的值,
3.在try中的每一句转换之后加代码,看到abc的值,叫做转换顺利完成,转换之后的值;
4.在catch中所有语句之前加代码,看到“转换没有顺利完成,出现异常了”,然后加代码,看到abc的值,叫做转换失败以后abc的值。
这样一目了然。
1.刚刚定义完abc以后,想办法加句代码看到abc的值,叫做刚刚定义完的值
2.在try中的a=Double.parseDouble(tf1.getText());语句之前加代码,看到abc的值,叫做转换之前的值,
3.在try中的每一句转换之后加代码,看到abc的值,叫做转换顺利完成,转换之后的值;
4.在catch中所有语句之前加代码,看到“转换没有顺利完成,出现异常了”,然后加代码,看到abc的值,叫做转换失败以后abc的值。
这样一目了然。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java可以自动数据类型转换,因为字符char是可以自动转换成int类型的,所以也就能转换成double类型的
追问
这是String类型啊
追答
我知道你这个问题了,其实是走了catch。是这样的,当你输入字母的时候,在a=Double.parseDouble(tf1.getText());的地方就抛出了异常,进入catch,但是执行完catch,就继续往下执行了,这个时候a,b,c没有赋值,所以初始值都为0,就满足了你if的第一个条件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
catch里面应该写的是对异常的处理,出现异常的时候才会执行。
更多追问追答
追问
可是出现异常时却实现了if 啊
追答
catch(Exception e){
e.printStackTrace();
}
catch的时候把异常打印出来就可以了,你把catch里面的代码移到外面试一下呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会运行catch,也会运行if
追问
那出现异常时为什么不实现catch ,反而实现if 呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询