您的位置:首页 > 编程语言 > Java开发

一元两次方程求解

2014-08-08 13:17 399 查看
编程求方程ax2+bx+c=0的解,其中的a,b,c由键盘输入。
package 一元两次方程;

import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import javax.swing.*;

public class QuadraticEquation {

JFrame jframe;
JPanel jp1,jp2,jp3;
JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8;
JTextField jt1,jt2,jt3,jt4,jt5;
JButton jbtn1,jbtn2,jbtn3;
Box box;

public void go(){
jl1 = new JLabel("由键盘输入a、b、c,求一元两次方程 ax2+bx+c=0 的解");
jl2 = new JLabel("输入a、b、c:");
jl3 = new JLabel("x2 + ");
jl4 = new JLabel("x + ");
jl5 = new JLabel(" = 0");
jl6 = new JLabel("方程 ax2+bx+c=0 的解为:");
jl7 = new JLabel("x1=");
jl8 = new JLabel(" x2=");

jl1.setFont(new Font("Dialog",Font.BOLD,18));
jl2.setFont(new Font("Dialog",Font.PLAIN,16));
jl3.setFont(new Font("Dialog",Font.PLAIN,16));
jl4.setFont(new Font("Dialog",Font.PLAIN,16));
jl5.setFont(new Font("Dialog",Font.PLAIN,16));
jl6.setFont(new Font("Dialog",Font.PLAIN,16));
jl7.setFont(new Font("Dialog",Font.PLAIN,16));
jl8.setFont(new Font("Dialog",Font.PLAIN,16));

jt1 = new JTextField(5);
jt2 = new JTextField(5);
jt3 = new JTextField(5);
jt4 = new JTextField(6);
jt5 = new JTextField(6);
jt4.setEditable(false);
jt5.setEditable(false);
jt4.setBackground(Color.CYAN);
jt5.setBackground(Color.CYAN);

box = Box.createHorizontalBox();
jbtn1 = new JButton(" 求 解 ",new ImageIcon("1.png"));
box.add(jbtn1);
box.add(Box.createHorizontalStrut(30));
jbtn2 = new JButton(" 清 除 ",new ImageIcon("3.png"));
box.add(jbtn2);
box.add(Box.createHorizontalStrut(30));
jbtn3 = new JButton(" 退 出 ",new ImageIcon("2.png"));
box.add(jbtn3);

jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp1.setBackground(Color.WHITE);
jp2.setBackground(Color.WHITE);
jp1.add(jl1);
jp2.add(jl2);
jp2.add(jt1);
jp2.add(jl3);
jp2.add(jt2);
jp2.add(jl4);
jp2.add(jt3);
jp2.add(jl5);
jp2.add(jl6);
jp2.add(jl7);
jp2.add(jt4);
jp2.add(jl8);
jp2.add(jt5);
jp3.add(box);

jframe = new JFrame("一元两次方程求解");
jframe.add(jp1,BorderLayout.NORTH);
jframe.add(jp2,BorderLayout.CENTER);
jframe.add(jp3,BorderLayout.SOUTH);
jframe.setSize(500, 180);
jframe.setLocation(450, 200);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setResizable(false);
jframe.setVisible(true);

/**
* 退出按钮注册事件
*/
jbtn3.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成的方法存根
System.exit(0);

}
});

/**
* 清除按钮注册事件
*/
jbtn2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
jt1.setText(null);
jt2.setText(null);
jt3.setText(null);
jt4.setText(null);
jt5.setText(null);

}
});

/**
* 求解按钮注册事件
*/
jbtn1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if (jt1.getText().length() == 0 || jt2.getText().length() == 0 || jt3.getText().length() == 0){

JOptionPane.showMessageDialog(jframe, "任意文本不能为空,请输入a、b、c ! ",
"警告", JOptionPane.WARNING_MESSAGE);

jt1.setText(null);
jt2.setText(null);
jt3.setText(null);

}else{

/*把字符串转换成double型*/
double a = Double.parseDouble(jt1.getText());
double b = Double.parseDouble(jt2.getText());
double c = Double.parseDouble(jt3.getText());
double x,x1,x2;

/*控制输入结果为小数点后面两位*/
DecimalFormat df = new DecimalFormat("0.00");

if(a==0 && b!=0)
{
x1=x2=-c/b;
if(x1==-0.00) {
x1 =0.00;
x2 =0.00;
}
jt4.setText(df.format(x1));
jt5.setText(df.format(x2));

}else if((a!=0) && (b*b-4*a*c>=0))
{
x1=(-b + Math.sqrt(b*b-4.0*a*c))/(2*a);
x2=(-b - Math.sqrt(b*b-4.0*a*c))/(2*a);
if(x1>x2){
x = x1;
x1 = x2;
x2 = x;
}
jt4.setText(df.format(x1));
jt5.setText(df.format(x2));

}else{

JOptionPane.showMessageDialog(jframe, "输入的a、b、c不能构成一元两次方程方程,请重新输入! ",
"错误", JOptionPane.ERROR_MESSAGE);

}
}

}
});

}

public static void main(String[] args) {
// TODO 自动生成的方法存根
QuadraticEquation qe = new QuadraticEquation();
qe.go();

}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 一元两次方程