`
浪子raining
  • 浏览: 2020 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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");

       }

}

0
2
分享到:
评论

相关推荐

    RC_JS_Game:使用Raining Chain教程https的画布上JavaScript游戏

    《RC_JS_Game:基于Raining Chain教程的JavaScript画布游戏开发详解》 JavaScript,作为Web开发中的重要语言,被广泛应用于各种动态效果和交互式应用,尤其是在游戏开发领域。本教程将聚焦于如何使用JavaScript在...

    CodeFirst:Еraining 项目

    这有助于理解如何将业务逻辑直接转化为可执行的代码,并在实际环境中验证这些代码的正确性。 在实践中,你还将接触到版本控制系统Git,学会如何管理代码版本,协同开发,以及提交和推送代码到远程仓库。同时,项目...

    陕西省安康市紫阳县紫阳七年级英语下册 Unit 7 It’s raining Period 2教案 (新版)人教新目标版.doc

    本节课主要涉及的是初中英语七年级下册Unit 7 "It’s raining!"的第二课时,内容集中在Section A的2a, 2b, 2c以及4和Grammar Focus部分。该单元的核心话题是谈论天气,旨在帮助学生掌握描述天气的词汇和表达方式,...

    Java读取远程主机文件

    标题 "Java读取远程主机文件" 涉及的核心知识点主要集中在Java远程操作技术,特别是使用SSH(Secure Shell)协议来实现对远程主机的文件访问。在这个场景中,开发人员可能需要从远程服务器上下载文件或者实时读取...

    精品资料(2021-2022收藏)Unit6 It’s raining - A.doc

    本份教育精品资料“Unit6 It’s raining - A.doc”主要围绕英语教学展开,重点关注描述天气、现在进行时的运用以及相关词汇的学习。以下是对各个部分的详细解释: 1. 教学目标: - 描述并谈论天气:让学生能够用...

    Java Class.forName()无法加载类

    NULL 博文链接:https://listen-raining.iteye.com/blog/1894456

    Bo-Blog Raining

    Bo-Blog Raining

    2015春季七年级英语下册 Unit 7 It’s raining课文重难点讲解(无答案)(新版)新人教版

    动词"rain"作为名词时,不可数,如"It’s raining."(正在下雨) - 雨的大小可以用"heavy"(大雨)或"light"(小雨)来形容。 - 题目①答案:rain - 题目②答案:raining - 题目③答案:wind 7. 不定冠词"a/an...

    LBS^2 raining

    【标题】"LBS^2 raining" 暗示了一个可能与地理位置服务(Location-Based Services,简称LBS)相关的项目或技术,结合描述中的“raining”,我们可以推测这可能是一个关于LBS技术在雨天环境或者天气条件下的应用场景...

    新人教七年级英语下册Unit Its raining复习PPT课件.pptx

    16. **some Russians** - 一些俄罗斯人,涉及不同国家的人。 17. **have fun doing sth.** - 开心地做某事,享受活动的乐趣。 18. **sit by the pool** - 坐在游泳池旁,休闲活动。 19. **my family and I** - 我和...

    05条件语句.pptx

    if is_raining: print("记得带伞") else: print("天气晴朗") ``` 对于多条件判断,可以使用if、elif和else语句。elif是"else if"的缩写,允许你检查多个条件,直到找到一个为True的条件并执行相应的代码块。例如...

    python笔记DAY1.docx

    在Python编程语言的学习中,第一天的笔记主要涵盖了基础概念,包括打印输出、文件路径操作、文件创建、程序运行方式以及变量、运算符等基础知识。以下是对这些知识点的详细阐述: 1. **打印输出**: 在Python中,...

    3D-raining.zip

    在3D建模的世界里,"3D-raining.zip" 提供了一个关于模拟连锁反应的项目,这让我们深入了解了3D技术在娱乐、设计和虚拟现实(VR)领域的应用。3D建模是数字艺术的核心技能,它允许艺术家们通过计算机软件创造出具有...

    raining200508浪潮存储产品线共76页.pdf

    很抱歉,根据您提供的信息,"raining200508浪潮存储产品线共76页.pdf" 和 "raining200508浪潮存" 标签似乎指向了一个关于浪潮存储产品的详细文档,但压缩包内的实际文件名为 "赚钱项目",这与浪潮存储产品线的主题不...

    Android 简单快速 实现 下雨 Raining

    ```java public class RainSurfaceView extends SurfaceView implements SurfaceHolder.Callback { // ... } ``` 2. 实现SurfaceHolder.Callback接口: 在SurfaceCreated()方法中,初始化绘图环境;在...

    raining.c

    raining.c

    陕西省安康市紫阳县紫阳七年级英语下册 Unit 7 It’s raining Period 5教案 (新版)人教新目标版.doc

    这篇文档是关于陕西省安康市紫阳县七年级英语下册Unit 7 "It’s raining" Period 5的教学教案,采用的是新版人教新目标版教材。本单元的核心话题是天气,旨在帮助学生掌握与天气相关的词汇和表达方式,提高他们的...

    从零开始学Python AI开发系列221

    在Python AI开发中,逻辑判断是编程中不可或缺的一部分,它使得我们的程序能够根据不同的条件执行不同的操作,从而赋予了代码智能决策的能力。本篇将详细讲解如何使用逻辑判断来构建多分支的程序流程。 首先,我们...

    【金榜学案】2014版七年级英语下册 Unit 7 It’s raining Section A(Grammar Focus-3

    这篇资料是关于七年级英语下册 Unit 7 It’s raining Section A 的 Grammar Focus-3b 部分,主要涉及了与天气相关的词汇、日常情景交际对话以及语法应用。以下是根据提供的内容提炼出的相关知识点: 1. **短语翻译*...

    陕西省安康市紫阳县紫阳七年级英语下册 Unit 7 It’s raining Period 4教案 (新版)人教新目标版.doc

    该文档是针对初中一年级下学期英语课程的教学方案,聚焦于Unit 7 "It’s raining!" 的第四课时,主要涉及人教新目标版教材。这个单元的核心内容是教授与天气相关的词汇、句型以及如何在不同天气条件下进行的活动。 ...

Global site tag (gtag.js) - Google Analytics