📄 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 JMenu[] jmArray = {new JMenu("文件"),new JMenu("帮助")};
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 + -