用java求解一元四次方程_Java程序设计(十四)----一个求一元二次方程根-Go语言中文社区...

* 程序的版权和版本声明部分

* Copyright (c) 2012, 烟台大学计算机学院学生

* All rights reserved.

* 作 者: 刘镇

* 完成日期: 2012 年 11 月 23 日

* 版 本 号: 2.014

* 对任务及求解方法的描述部分

* 问题描述:编写一个FontFamily类,该类对象获取当前机器可用的全部字体名称。编写一个对话框FontDialog,该对话框是模式对话框,采用BorderLayout布局,包含一个JComboBox放在北面显示全部字体的名称,包含一个JLabel放在中间,显示字体的效果,包含两个按钮放在南面,点击YES,在对话框所依赖的窗口中设置字体的效果,点击Cancle取消。编写一个窗口FrameHaveDialog,该窗口有一个按钮和一个文本区,当单击该按钮时,弹出对话框FontDialog,然后根据用户在对话框下拉列表中选择的为显示文本区中的文本。最后编写一个程序执行入口进行测试。

*代码部分:

MyPanel:

package lz_13w;

import java.awt.FlowLayout;

import java.awt.Panel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.nio.DoubleBuffer;

import javax.swing.*;

/*

* 定义Panel实现系数的输人和button按钮:

* 值得一提的是:通过初始化SetLayout()指定布局;通过SetSize()和 SetPreferredSize()改变指定了布局后组件大小如何改变;

*/

public class MyPanel extends Panel{

JLabel label1, label2, label3;

JTextField text1, text2, text3;

JButton button;

MyPanel()

{

this.setLayout(new FlowLayout(FlowLayout.CENTER));

text1 = new JTextField();

text1.setSize(65, 20);

text1.setPreferredSize(text1.getSize());

text2 = new JTextField();

text2.setSize(65, 20);

text2.setPreferredSize(text1.getSize());

text3 = new JTextField();

text3.setSize(65, 20);

text3.setPreferredSize(text1.getSize());

label1 = new JLabel("二次项系数");

label2 = new JLabel("一次项系数");

label3 = new JLabel("常数项");

button = new JButton("确定");

add(label1);

add(text1);

add(label2);

add(text2);

add(label3);

add(text3);

add(button);

}

}

SquareEquation:

package lz_13w;

/*

* 自定义异常:用于无实根情况;

*/

class NoSolveException extends Exception

{

public String message;

public NoSolveException() {

message = "输入结果无实根!";

}

public String toString()

{

return message;

}

}

/*

* A是二次方系数;B是一次放系数;C是常数项系数;x1,x2用于存储两个根;m返回信息;

*/

public class SquareEquation {

private double A;

private double B;

private double C;

private double x1;

private double x2;

public static String m;

public SquareEquation() {

A = 0;

B = 0;

C = 0;

}

public SquareEquation(double A, double B, double C){

this.A = A;

this.B = B;

this.C = C;

}

public double getA() {

return A;

}

public void setA(double A) {

A = A;

}

public double getB() {

return B;

}

public void setB(double B) {

B = B;

}

public double getC() {

return C;

}

public void setC(double c) {

C = c;

}

/*

* Solve用于用数学公式呢求解两根:flag是(b^2 - 4 * a * c);

* if语句是用于抛出无实根异常;而如果有实根则执行相关求解;用m返回求解信息。

*/

public void Solve() throws NoSolveException

{

double flag = this.B * this.B - 4 * this.A * this.C;

if(flag < 0)

{

NoSolveException exception = new NoSolveException();

throw exception;

}

else

{

this.x1 = ((- this.B) + Math.sqrt(flag)) / 2 * this.A;

if(flag == 0)

{

this.x2 = this.x1;

}

this.x2 = ((- this.B) - Math.sqrt(flag)) / 2 * this.A;

m = "根: " + this.x1 + "根: " + this.x2;

}

}

}

EquationFrame:

package lz_13w;

import java.awt.BorderLayout;

import java.awt.TextArea;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JTextArea;

/*

* 对窗体的编写:用MyPanel、JTestArea和求解类SquarEquation将窗口实现。

*

*/

public class EquationFrame extends JFrame implements ActionListener{

MyPanel panel;

JTextArea textArea;

SquareEquation s1;

public EquationFrame() {

this.setLayout(new BorderLayout());

panel = new MyPanel();

panel.button.addActionListener(this);

textArea = new JTextArea();

textArea.setBounds(getX(), getY(), 100, 100);

add(panel, BorderLayout.NORTH);

add(textArea, BorderLayout.CENTER);

setBounds(450, 300, 600, 125);

setVisible(true);

validate();

}

/*

*

* (non-Javadoc)

* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)

* 下面定义了事件actionPerformed,实现的思想是:初始化EquationFrame,初始参数通过三个TextArea组件获得,并将有可能的两种异常捕获,一个是数据输入错误异常;一个是无实根异常;

* 通过一个自定义异常和默认的NumberFormatException打印到TextArea中显示;否则无异常直接显示结果。

*/

public void actionPerformed(ActionEvent e) {

try {

s1 = new SquareEquation(Double.valueOf(panel.text1.getText()), Double.valueOf(panel.text2.getText()), Double.valueOf(panel.text3.getText()));

s1.Solve();

}catch(NumberFormatException e1){

s1.m = "输入有误,发生异常:" + e1.getMessage();

this.textArea.setText(s1.m);

}catch (NoSolveException e2) {

s1.m = e2.toString();

this.textArea.setText(s1.m);

}

this.textArea.setText(s1.m);

}

}

TestEquation:

package lz_13w;

public class TestEquation {

/**

* @param args

*/

public static void main(String[] args) {

new EquationFrame();

}

}

测试结果:

56438589a80c39baecf7e873e9c176e4.png

226def89c29b0d9e0717c2e8bec560ab.png

心得经验:

一、以前没写过注释,最近接触了几个同学,他们参赛的体会是注释虽然不是对程序本身有什么改进,但对于后面维护,或是说善后工作有帮助,尽管现在由于代码量不大体现不明显;但好习惯还是早养成的好;

二、在MyPanel中:以前总是觉得为什么SetSize()不能改变组建的大小啊,郁闷之后,发现:每当我设置画布或是窗口的布局,就将setSize()屏蔽了(也许不太贴切),但确实setLayout()优先级高于SetSize(),从网上查找了俩解决办法,从而使组建能按自己意愿调整大小:1、通过setLayout(null);总觉得这样是不太好的方法;到哪也能解决。2、通过加:SetSize(12,

33);和SetPreferredSize(getSize());设置指定大小的组建;

三、在解决布局时以前总是用:“SetLayout(new FlowLayout());”,总是觉得组建不能固定大小位置,按照输入自己在调整大小位置;现在:SetLayout(new FlowLayout(FlowLayout.Center));将组建固定在布局中,居中显示;

四、一个半解决的问题:在自定义异常中:SquationFrame中捕获的异常不能通过:e1.getMessage()或是 e1.toString()直接通过JTextArea中的SetText()显示,必须通过先赋值给一个String变量,再显示;不知问题出在哪,有待解决。具体代码:

catch(NumberFormatException e1){

s1.m = "输入有误,发生异常:" + e1.getMessage();

this.textArea.setText(s1.m);}

catch (NoSolveException e2) {

s1.m = e2.toString();

this.textArea.setText(s1.m);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值