Java学习——96.一元二次方程的判断
对于昨天的一元二次方程,在输入的系数不正确时,在代码中并没有进行判断其是否为一元二次方程,而是直接进行求解。
但是在其求解之前,还应该判断一下系数是否正确。
比如当输入的a为0时,此是一个一元一次方程,只有一个解,其值为:x=-c/b。
当a不为0时,要判断其有没有实数根,即判断
的值是否大于0。
(1)如果大于0,其有两个实根,其解为昨天所示。
(2)如果等于0,其有两个相等的实根;
(3)如果小于0,其没有实数根。
本篇只用了图形用户界面方法,其运行结果如下:
(1)输入 a为0时:
(2)有两个实根的情况 :
(3)两个相等实根的情况:
(4)没有实数根的情况:
其完整代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//y=a^2+b*x+c
publicclass yiyuan extends JFrame implements ActionListener{
privatestaticfinallongserialVersionUID = 1L;
private JTextField a,b,c;
private JButton button;
private JTextArea text;
public yiyuan() {
super("求解一元二次方程");
this.setVisible(true);
this.setSize(260,240);
this.setLocation(200,200);
JPanel p=new JPanel();
JLabel label1=new JLabel("求一元二次方程:ax^2+bx+c=0的值");
JLabel label2=new JLabel("这里的^表示乘方");
label2.setForeground(Color.blue);
p.add(label1);
p.add(label2);
this.getContentPane().add(p,"North");
JPanel p1=new JPanel();
p1.add(new JLabel("请输入系数a:"));
a=new JTextField(10);
p1.add(a);
p1.add(new JLabel("请输入系数b:"));
b=new JTextField(10);
p1.add(b);
p1.add(new JLabel("请输入系数c:"));
c=new JTextField(10);
p1.add(c);
button=new JButton("计算");
button.addActionListener(this);
p1.add(button,"");
this.getContentPane().add(p1);
text=new JTextArea();
this.getContentPane().add(text,"South");
}
publicstaticvoid main(String args[]) {
new yiyuan();
}
@Override
publicvoid actionPerformed(ActionEvent arg0) {
// TODO Auto-generatedmethod stub
double ax,bx,cx;
if(a.getText().equals("")||b.getText().equals("")||c.getText().equals("")) {
text.setText("请输入系数");
text.setForeground(Color.red);
}
else {
ax=Double.parseDouble(a.getText());
bx=Double.parseDouble(b.getText());
cx=Double.parseDouble(c.getText());
if(ax==0){
text.setText("此方程不是一元二次方程,而是一元一次方程!\n其x的解为:x="+(-cx)/bx);
text.setForeground(Color.blue);
}
else{
double r=Math.sqrt(Math.pow(bx, 2)-4*ax*cx);
if(r>0){
double x1=(-bx+r)/(2*ax);
double x2=(-bx-Math.sqrt(Math.pow(bx,2)-4*ax*cx))/(2*ax);
text.setForeground(Color.black);
text.setText("方程"+a.getText()+"x^2+"+b.getText()+"x+"+c.getText()+"的值为:\nx1="+x1+"\nx2="+x2);
a.setText("");
b.setText("");
c.setText("");
}
elseif(r==0){
double x1=(-bx)/(2*ax);
text.setText("此方程有两个相等的实根,x1=x2="+x1);
}
else{
text.setText("此方程没有实数根");
text.setForeground(Color.green);
}
}
}
}
}