⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myequation.java

📁 java 二元一次方程计算器 方便大家计算二元一次方程
💻 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 + -