Java 组件及事件处理实训 实训2:编写一个窗体程序,用于计算一元二次方程

代码:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class EquationFrame extends JFrame implements ActionListener {
	SquareEquation equation;
	JTextField textA, textB, textC;
	JTextArea showRoots;
	JButton controlButton;

	public EquationFrame() {
		equation = new SquareEquation();
		textA = new JTextField(8);
		textB = new JTextField(8);
		textC = new JTextField(8);
		controlButton = new JButton("确定");
		JPanel pNorth = new JPanel();
		pNorth.add(new JLabel("二次项系数:"));
		pNorth.add(textA);
		pNorth.add(new JLabel("一次项系数:"));
		pNorth.add(textB);
		pNorth.add(new JLabel("常数项系数:"));
		pNorth.add(textC);
		pNorth.add(controlButton);
		controlButton.addActionListener(this);
		getContentPane().add(pNorth, BorderLayout.NORTH);
		showRoots=new JTextArea();
		JScrollPane scrollPane =new JScrollPane(showRoots);
		getContentPane().add(scrollPane,BorderLayout.CENTER);
		setSize(630, 160);
		Dimension scnSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension fromSize = this.getSize();
		this.setLocation((scnSize.width - fromSize.width) / 2,
				(scnSize.height - fromSize.height) / 2);
		validate();
		setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void actionPerformed(ActionEvent e) {
		try {

			double a = Double.parseDouble(textA.getText());
			double b = Double.parseDouble(textB.getText());
			double c = Double.parseDouble(textC.getText());
			equation.setA(a);
			equation.setB(b);
			equation.setC(c);
			showRoots.append("根:" + equation.getRootOne());
			showRoots.append("根:" + equation.getRootTwo() + "\n");
		} catch (Exception ex) {
			showRoots.append(ex.getMessage() + "\n");
		}

	}

	public static void main(String args[]) {
		new EquationFrame();
	}

}

public class SquareEquation {
	double a, b, c;

	public void setA(double a) {
		this.a = a;
	}

	public void setB(double b) {
		this.b = b;
	}

	public void setC(double c) {
		this.c = c;
	}

	public double getRootOne() {
		double disk = calculateValidDisk();
		return (-b + Math.sqrt(disk)) / (2 * a);
	}

	public double getRootTwo() {
		double disk = calculateValidDisk();
		return (-b + Math.sqrt(disk)) / (2 * a);
	}

	private double calculateValidDisk() {
		if (a == 0) {
			throw new EquationException("不是二次方程",
					EquationException.NONE_EQUATION);
		}
		double disk = b * b - 4 * a * c;
		if (disk < 0) {
			throw new EquationException("没有实根", EquationException.NO_REAL_ROOT);
		}
		return disk;
	}
}

class EquationException extends RuntimeException {
	public static final int NONE_EQUATION = 1;
	public static final int NO_REAL_ROOT = 2;
	private int errorCode;

	public EquationException(String msg, int errorCode) {
		super(msg);
		this.errorCode = errorCode;
	}

	public int getErrorCode() {
		return errorCode;
	}
}
运算结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值