一元两次方程求解

编程求方程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();

	}

}

一元两次方程求解_第1张图片


你可能感兴趣的:(一元两次方程求解)