?? myequation.java
字號:
/*
*一元二次方程解的小程序
*
*想到哪里寫到哪里,還未進行代碼的優化!老師先過目下!初學java肯定有很多問題! =。=!
*
*已經考慮到很多情況的可能。肯定還存在很多BUG。。。。待測試修改!!
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.Math;
public class MyEquation extends JFrame implements ActionListener{
private double a;
private double b;
private double c;
private double delta;
private JPanel jp = new JPanel();
private JMenuItem jmiwenjian = new JMenuItem("退出");
private JMenuItem jmihelp = new JMenuItem("關于");
private JMenuBar jmb = new JMenuBar();
private JLabel[] signArray = {new JLabel("方程賦值:"),new JLabel("運算形式:"),new JLabel("操作欄:"),new JLabel("運算顯示欄:")};
private JTextField[] jteArray = {new JTextField(2),new JTextField(2),new JTextField(2)};
private JLabel[] jlbArray = {new JLabel("X^2+"),new JLabel("X+"),new JLabel("=0")};
private JRadioButton[] jraArray = {new JRadioButton("保留根號"),new JRadioButton("保留小數")};
private JButton[] butArray = {new JButton("計算"),new JButton("重置")};
private ButtonGroup bg = new ButtonGroup();
private JTextArea result=new JTextArea(20,60);
private JLabel textState = new JLabel("狀態備注: 當前方程未賦值系數!");
//界面布局
public MyEquation() {
jp.setLayout(null);
jmb.add(jmArray[0]);
jmb.add(jmArray[1]);
jmArray[0].add(jmiwenjian);
jmiwenjian.addActionListener(this);
jmArray[1].add(jmihelp);
jmihelp.addActionListener(this);
this.setJMenuBar(jmb);
for(int i=0;i<3;i++)
{
jteArray[i].setBounds(40+i*70,50,30,30);
jlbArray[i].setBounds(80+i*70,50,30,30);
jp.add(jteArray[i]);
jp.add(jlbArray[i]);
jteArray[i].addActionListener(this);//賦值框監聽
if(i<2)
{
jraArray[i].setBounds(40+i*120,125,90,30);
bg.add(jraArray[i]);
if(i>1) continue;
butArray[i].setBounds(40+i*130,200,80,40);
jp.add(jraArray[i]);
jp.add(butArray[i]);
jraArray[i].addActionListener(this);//保留根號,保留小數監聽
butArray[i].addActionListener(this);//計算按鈕,重置按鈕監聽
}
signArray[i].setBounds(10,20+i*70,80,30);
jp.add(signArray[i]);
}
signArray[3].setBounds(300,20,70,30);
result.setBounds(300,50,200,200);
result.setEditable(false);
jp.add(result);
jp.add(signArray[3]);
jp.setBorder(new TitledBorder("控制欄目"));
this.add(jp);
this.add(textState,BorderLayout.SOUTH);
this.setTitle("一元二次方程的解");
this.setBounds(300,300,550,350);
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//實現幾個功能的監聽,以及判斷,按鈕的控制
//if寫了很多,考慮到很多種情況的可能,寫得亂七八糟的!! =。=!!
public void actionPerformed(ActionEvent e)
{
StringBuffer temp=new StringBuffer("△= b^2-4ac");
StringBuffer temp1=new StringBuffer("");
//菜單選項 1.退出 2.關于
if(e.getSource()==jmiwenjian)
{System.exit(0);}
if(e.getSource()==jmihelp)
{JOptionPane.showMessageDialog (null," 抄襲無罪,懶人萬歲 ","關于",JOptionPane.WARNING_MESSAGE);}
//重置鍵的功能,3個賦值框置空
if(e.getSource()==butArray[1])
{
for(int j=0;j<3;j++)
{
jteArray[j].setText("");
}
}
//計算功能按鈕
if(e.getSource()==butArray[0])
{
//判斷賦值框是否為空
if(jteArray[0].getText().equals("")|jteArray[1].getText().equals("")|jteArray[2].getText().equals(""))
{
JOptionPane.showMessageDialog (null,"傻瓜,沒系數叫我怎么算啊!","警告",JOptionPane.WARNING_MESSAGE);
}
a=Double.parseDouble(jteArray[0].getText());
b=Double.parseDouble(jteArray[1].getText());
c=Double.parseDouble(jteArray[2].getText());
delta=Math.pow(b,2)-4*a*c;
double x1=(-b+Math.sqrt(delta))/2*a;
double x2=(-b-Math.sqrt(delta))/2*a;
//底層狀態賦值欄
getresult((int)a,(int)b,(int)c);
//運算類型是否有選擇
if(!jraArray[0].isSelected()&&!jraArray[1].isSelected()){
JOptionPane.showMessageDialog (null,"請選擇運算類型!","警告",JOptionPane.WARNING_MESSAGE);
}
//保留小數
if(!jraArray[0].isSelected()&&jraArray[1].isSelected())
{
if(a==0 && b==0 && c==0 || a==0 && b==0)
{
JOptionPane.showMessageDialog (null,"傻瓜,哪有這樣賦值的!","警告",JOptionPane.WARNING_MESSAGE);
}
else if(a==0)
{
result.setText(temp1.append("x=-c/b\n ="+c+"/"+b+"\n ="+(-c/b)).toString());
}
else if(b==0)
{
if(c/a<0){result.setText(temp1.append("-c/a<0 方程無解!").toString());}
else{result.setText(temp1.append("x=sqr(-c/a)="+Math.sqrt(-c/a)).toString());}
}
else if(c==0)
{
result.setText(temp1.append("x=-b/a\n ="+(-b/a)).toString());
}
else if(delta<0){
result.setText(temp.append("\n ="+b+"^2"+"-4*"+a+"*"+c+"\n ="+delta+"<0\n 方程無解!").toString());
}
else if(delta==0){
result.setText(temp.append("\n ="+b+"^2"+"-4*"+a+"*"+c+"\n ="+delta+"\n 方程有兩個相等的實數根!"+"\n x1=x2="+x1).toString());
}
else{
result.setText(temp.append("\n ="+b+"^2"+"-4*"+a+"*"+c+"\n ="+delta+">0\n 方程有兩個不相等的實數根!"+"\n x1="+x1+"\n x2="+x2).toString());
}
}
//保留根號
if(jraArray[0].isSelected()&&!jraArray[1].isSelected())
{
int genhao;
int zhengshu;
if(a==0 && b==0 && c==0 || a==0 && b==0)
{
JOptionPane.showMessageDialog (null,"傻瓜,哪有這樣賦值的!","警告",JOptionPane.WARNING_MESSAGE);
}
else if(a==0)
{
result.setText(temp1.append("x=-c/b\n ="+c+"/"+b+"\n ="+(-c/b)).toString());
}
else if(b==0)
{
if(c/a<0){result.setText(temp1.append("-c/a<0 方程無解!").toString());}
else
{result.setText(temp1.append("x=sqr(-c/a)="+Math.sqrt(-c/a)).toString());}
}
else if(c==0)
{
result.setText(temp1.append("x=-b/a\n ="+(-b/a)).toString());
}
else if(delta<0)
{
result.setText(temp.append("\n ="+b+"^2"+"-4*"+a+"*"+c+"\n ="+delta+"<0\n 方程無解!").toString());
}
else if(delta==0)
{
result.setText(temp.append("\n ="+b+"^2"+"-4*"+a+"*"+c+"\n ="+delta+"\n 方程有兩個相等的實數根!"+"\n x1=x2="+x1).toString());
}
else{
int a1=Integer.parseInt(jteArray[0].getText());
int b1=Integer.parseInt(jteArray[1].getText());
int c1=Integer.parseInt(jteArray[2].getText());
int delta1=(int)Math.pow(b1,2)-4*a1*c1;
getresult(a1,b1,c1);
zhengshu = (int)(Math.sqrt(delta1));
if(delta1==1)
{
result.setText(temp.append("\n ="+b1+"^2"+"-4*"+a1+"*"+c1+"\n ="+delta1+">0\n 方程有兩個不相等的實數根!"+"\n x1="+x1+"\n x2="+x2).toString());
}
else{//這段保留根號的算法是曾經傳給老師過目的了!按部就班的算法。寫得比較亂!
for (int count=zhengshu;count>=1;count--) //強制轉換整數賦給count
{
if(delta1%(count*count)==0) //取整后,一直累減,判斷是否能整除
{
zhengshu = count;//能整除的就是根號外面的整數部分
break;
}
}
genhao = (int)delta1/(zhengshu*zhengshu);
if(zhengshu!=1)
{
if(genhao!=1)
{
result.setText(temp.append("\n ="+b1+"^2"+"-4*"+a1+"*"+c1+"\n ="+delta1+">0\n 方程有兩個不相等的實數根"+"\n x1=("+(-b1)+"+"+zhengshu+"√ "+genhao+")/"+(2*a1)+"\n x2=("+(-b1)+"-"+zhengshu+"√ "+genhao+")/"+(2*a1)).toString());
}
else
{
result.setText(temp.append("\n ="+b1+"^2"+"-4*"+a1+"*"+c1+"\n ="+delta1+">0\n 方程有兩個不相等的實數根"+"\n x1="+((-b1+zhengshu)/2*a1)+"\n x2="+((-b1-zhengshu)/2*a1)).toString());
}
}
if(zhengshu==1)
{
result.setText(temp.append("\n ="+b1+"^2"+"-4*"+a1+"*"+c1+"\n ="+delta1+">0\n 方程有兩個不相等的實數根"+"\n x1=("+(-b1)+"+"+"√ "+genhao+")/"+(2*a1)+"\n x2=("+(-b1)+"-"+"√ "+genhao+")/"+(2*a1)).toString());
}
}
}//delta>0 判斷結束
}//保留根號計算結束
}
}
//程序底下狀態欄目的提示 方法
public String getresult(int a,int b,int c)
{
String tempResult = "狀態備注: 當前方程系數賦值為:";
tempResult = tempResult+""+a+"X^2+"+b+"X+"+c+"=0";
textState.setText(tempResult);
return tempResult;
}
public static void main(String args[])
{
MyEquation me = new MyEquation();//最后一句寫完。。。。激動的淚水啊! 2008年9月24日 01點:40分:43秒
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -