java一元二次方程程序设计实验报告_Java 组件及事件处理实训 实训2:编写一个窗体程序,用于计算一元二次方程...

这篇博客介绍了一个使用Java Swing编写的窗体程序,该程序能够计算一元二次方程的根。用户可以输入二次项、一次项和常数项的系数,程序会显示计算结果。如果输入的不是二次方程或者没有实根,程序会抛出相应的错误信息。
摘要由CSDN通过智能技术生成

4fa9e0abc4787192a33df73163375fd8

代码:

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;

}

}运算结果:

e2e9892573a3a701b3417e341780e8ab

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值