JAVA简易计算器(可判断运算符的优先级)制作人:浪子raining

package bean;

import java.awt.*;

import java.awt.Image;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import javax.swing.*;

import java.util.*;

public class Calculate extends JFrame implements ActionListener {

    //                                                    10  11  12  13  14  15  16  17   18

       String bn[]={"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","CE","C","=","+/-"};

    JButton btn[]=new JButton[19];

    Panel p[]=new Panel[6];

    TextField text;

    Box box;

    FlowLayout fv;

       Calculate(String title)

    {

           super(title);

           this.setDefaultCloseOperation(EXIT_ON_CLOSE);

           box=Box.createVerticalBox();

           fv=new FlowLayout();

           fv.setVgap(20);

/*

           //下面是设置计算器图标的方法:

           java.net.URL imgURL = Calculate.class.getResource("images/icon.jpg");   //绝对路径:"./images/icon.jpg",相对路径:"images/icon.jpg"

           ImageIcon imgIcon = new ImageIcon(imgURL);

           Image img = imgIcon.getImage();

           this.setIconImage(img);

 */

         this.setLocationRelativeTo(null);       

           for(int i=0;i<bn.length;i++)

           {

                  btn[i]=new JButton(bn[i]);

                  btn[i].addActionListener(this);

                  if(i!=15&&i!=16)

                  {

                         btn[i].setPreferredSize(new Dimension(55,35));

                  }

                  else

                  {

                           btn[i].setPreferredSize(new Dimension(85,35));

                  }

                  if(i<6)

                  {

                         p[i]=new Panel();

                         box.add(p[i]);

                  }

                  if(i==0)

                  {

                         text=new TextField("0",30);

                         p[0].add(text);

                  }

           }

           p[1].add(btn[7]);p[1].add(btn[8]);p[1].add(btn[9]);p[1].add(btn[10]);

           p[2].add(btn[4]);p[2].add(btn[5]);p[2].add(btn[6]);p[2].add(btn[11]);

           p[3].add(btn[1]);p[3].add(btn[2]);p[3].add(btn[3]);p[3].add(btn[12]);

           p[4].add(btn[0]);p[4].add(btn[14]);p[4].add(btn[18]);p[4].add(btn[13]);

           p[5].add(btn[15]);p[5].add(btn[16]);p[5].add(btn[17]);

           this.add(box);

           this.setBounds(520,200,280,320);

           this.setResizable(false);

           this.setVisible(true);

           this.validate();

    }

       int press=0;                            //用于判断按钮.的点击次数

       int press1=0;                           //用于运算符按钮的点击次数

       int press2=0;                           //用于记录+/-按钮的点击次数

       int strlen=0;                           //用于记录按下运算符时的字符串长度

       StringBuffer str=new StringBuffer("0"); //用于记载整条字符串

       StringBuffer str2=new StringBuffer("0"); //用于记载整条字符串

       double sum1=0;                          //初始化总和

       public void actionPerformed(ActionEvent e) {

     if(e.getSource()==btn[10])             //按钮+

        {

            this.yunsf(10);

        }

     if(e.getSource()==btn[11])             //按钮-

        {

            this.yunsf(11);

        }

        if(e.getSource()==btn[12])             //按钮*

     {

               this.yunsf(12);

        }

        if(e.getSource()==btn[13])             //按钮/

        {

        this.yunsf(13);

        }   

        if(e.getSource()==btn[14])             //按钮点.

        {

               if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/'&&press!=1)

               {

                      str.append(btn[14].getText());

                      str2.append(btn[14].getText());

                      text.setText(str.toString());

                      press=1;

               }

        }

        if(e.getSource()==btn[18])             //按钮+/-

        {

               if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/')

               {

                      if(press2==0)

                      {

                             str.insert(strlen, "-");

                             str2.insert(strlen, "@");               //////////////////////////////

                             text.setText(str.toString());

                             press2=1;

                      }

                      else

                      {

                             str.deleteCharAt(strlen);

                             str2.deleteCharAt(strlen);

                             text.setText(str.toString());

                             press2=0;

                      }

               }

        }

        if(e.getSource()==btn[15])             //按钮CE

        {

               if(strlen!=0)

               {

                 str.delete(strlen, str.length());

                 str2.delete(strlen, str2.length());

                 text.setText(str.toString());

               }

               else

               {

                      str.delete(0,str.length());

                      str2.delete(0,str2.length());

                      str.append("0");

                      str2.append("0");

                      text.setText(str.toString());

                      press=0;

                      press2=0;

               }

        }

        if(e.getSource()==btn[16])             //按钮C

     {

             str.delete(0, str.length());

             str2.delete(0, str2.length());

              str.append("0");

              str2.append("0");

              text.setText(str.toString());

              press=0;

              press1=0;

              press2=0;

              strlen=0;

        }

        if(e.getSource()==btn[17])             //按钮=

        {

               if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/'&&press!=1)

               {

                     String txt=str2.toString();

                  String shu[]=txt.split("\\+|\\-|\\*|\\/");    //分解出字符串中的数字字符

                  String fh[]=txt.split("@\\d+\\\56\\d+|@\\d+|\\d+\\\56\\d+|\\d+");     //分解出字符串中的运算符

                  for(int i=0;i<shu.length;i++)

                  {

                         if(shu[i].startsWith("@"))

                         {

                                shu[i]="-"+shu[i].substring(1);                             

                         }

                  }

                  calculate(shu,fh);       

               }

        }

        if(e.getSource()==btn[0])

        {

               this.shuzi(0);

        }

        if(e.getSource()==btn[1])

        {

               this.shuzi(1);

        }

        if(e.getSource()==btn[2])

        {

               this.shuzi(2);

        }

        if(e.getSource()==btn[3])

        {

               this.shuzi(3);

        }

        if(e.getSource()==btn[4])

        {

               this.shuzi(4);

        }

        if(e.getSource()==btn[5])

        {

               this.shuzi(5);

        }

        if(e.getSource()==btn[6])

        {

               this.shuzi(6);

        }

        if(e.getSource()==btn[7])

        {

               this.shuzi(7);

        }

        if(e.getSource()==btn[8])

        {

               this.shuzi(8);

        }

        if(e.getSource()==btn[9])

        {

         this.shuzi(9);

        }

      

       }

       public void yunsf(int i)          //制定运算符按钮规则

       {

               if(str.charAt(str.length()-1)!='+'&&str.charAt(str.length()-1)!='-'&&str.charAt(str.length()-1)!='*'&&str.charAt(str.length()-1)!='/'&&str.charAt(str.length()-1)!='.')    

               {

                      str.append(btn[i].getText());

                      str2.append(btn[i].getText());

                      text.setText(str.toString());

                      press=0;

                      press1=1;

                      press2=0;

                      strlen=str.length();

               }

       }

    public void shuzi(int i)          //制定数字按钮规则

    {

          if(press1!=1&&press!=1&&str.charAt(0)=='0')

               {

                      str.replace(0, 1,btn[i].getText());

                      str2.replace(0, 1,btn[i].getText());

                   text.setText(str.toString());

               }

               else

               {

                      str.append(btn[i].getText());

                      str2.append(btn[i].getText());

                      text.setText(str.toString());

               }   

    }

       public void calculate(String shu[],String fh[])  //制定运算规则

       {

              for(int i=1;i<fh.length;i++)

              {

                     if(fh[i].equals("*"))

                     {

                            double sum=0;

                            sum=Double.parseDouble(shu[i-1])*Double.parseDouble(shu[i]);

                            shu[i-1]=Double.toString(0);

                            shu[i]=Double.toString(sum);

                            fh[i]="#";                           

                     }

                     if(fh[i].equals("/"))

                     {

                            double sum=0;

                            sum=Double.parseDouble(shu[i-1])/Double.parseDouble(shu[i]);

                            shu[i-1]=Double.toString(0);

                            shu[i]=Double.toString(sum);

                            fh[i]="#";                           

                     }

              }

              for(int i=1;i<fh.length;i++)

              {

                     if(fh[i].equals("-"))

                     {

                            double sum=0;

                            int n=i;

                            for(int j=i;j<fh.length;j++)

                            {

                                   if(fh[j].equals("#"))

                                   {

                                          n++;

                                   }

                            }

                            sum=Double.parseDouble(shu[i-1])-Double.parseDouble(shu[n]);

                            shu[i-1]=Double.toString(0);

                            shu[n]=Double.toString(sum);

                            fh[i]="+";

                     }

              }

              sum1=Double.parseDouble(shu[0]);

              for(int i=1;i<shu.length;i++)

              {

                  sum1+=Double.parseDouble(shu[i]);

              }           

              text.setText(Double.toString(sum1));   

              str.delete(0, str.length());

              str.append(text.getText());

              strlen=0;

              str2.delete(0, str2.length());

              str2.append(text.getText());

              press2=0;

       }

       public static void main(String args[])

       {

              Calculate cal=new Calculate("JAVA计算器:浪子raining");

       }

}

你可能感兴趣的:(Java计算器,java简易计算器,可判断优先级的计算器)