Java程序设计(十四)----一个求一元二次方程根
来源:互联网 发布:同时学多个编程语言 编辑:程序博客网 时间:2024/05/22 17:20
* 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();}}
测试结果:
心得经验:
一、以前没写过注释,最近接触了几个同学,他们参赛的体会是注释虽然不是对程序本身有什么改进,但对于后面维护,或是说善后工作有帮助,尽管现在由于代码量不大体现不明显;但好习惯还是早养成的好;
二、在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);}
- Java程序设计(十四)----一个求一元二次方程根
- 程序设计:求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- 求一元二次方程的根
- ExtJS4组件_form表单配置-属性-方法详解
- magento如何改变产品的排序方式
- 绑定服务-Bound Services
- SCNetworkReachability
- C#自定义控件的实现
- Java程序设计(十四)----一个求一元二次方程根
- job案例每30分钟自动写入数据
- mysql存储过程详解
- vim剪切命令
- 操作系统:更换引擎正当时
- AIX文件系统及其他一些知识
- connect to oracle 11g rac
- base.EndInvoke("", _args, result) not find
- FlexPMD 编程代码质量检测器相关