zoukankan      html  css  js  c++  java
  • 自己写的计算机

    经过自己的多轮测试,应该是没有bug了,运算起来十分灵活,有兴趣的可以复制下来自己测试一下。

    package Calculator;

    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Frame;
    import java.awt.GridLayout;
    import java.awt.Label;
    import java.awt.Panel;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    class jisuanqi extends Frame implements ActionListener

    {


      TextField a;
      Button []d=new Button[16];
      String yemian="";


      double d1;
      double d2;
      double yi;
      double er;
      String qian;
      boolean flager=true;
      boolean flagsan=true;
      boolean flagsi=true;
      boolean flagwu=true;
      int jilu=0;
      String fuhao;
      boolean flag=true;

      jisuanqi()
      {
      a=new TextField();
      a.setEditable(false);
      add(a);
      Panel c=new Panel();
      c.setLayout(new GridLayout(5,4,5,5));
      c.add(new Label(""));
      c.add(new Label(""));
      Button shanyige=new Button("c");
      shanyige.addActionListener(this);
      c.add(shanyige);
      c.add(new Button("ce"));
      String [] b={"7","8","9","/","4","5","6","*","1","2","3","-","0","=",".","+"};
      for(int x=0;x<b.length;x++)

      {
        d[x]=new Button(b[x]);
        c.add(d[x]);
      }
      for(int x=0;x<d.length;x++)

      {
        d[x].addActionListener(this);
      }
      add(c,BorderLayout.SOUTH);
      setSize(300,250);
      setVisible(true);
      setResizable(false);
      setLocation(600,300);
    }

    public void actionPerformed(ActionEvent e)
    {

      String num=e.getActionCommand();

      String b=a.getText();

      switch(num)
      {
      case "0":
      case "1":
      case "2":
      case "3":
      case "4":
      case "5":
      case "6":
      case "7":
      case "8":
      case "9":
        if(flager)
        {
          if(b.equals("0"))
          {
          a.setText(num);
          }
          else
          {
          a.setText(b+num);
          }
        }

        else
        {
          a.setText(num);
          flager=true;
          flagwu=false;
          jilu=0;
        }
        flagsan=false;
        break;
      case "+":jisuan(a,"+");break;
      case "-":jisuan(a,"-");break;
      case "*":jisuan(a,"*");break;
      case "/":jisuan(a,"/");break;
      case "=":jisuan(a,"=");break;
      case ".":
        if(!b.contains("."))
        {
        a.setText(b+".");
        }
        break;
      case "c":
        if(flagwu)
        {
          if(b.length()>1)
          {
            String hh=b.substring(0,b.length()-1);
            a.setText(hh);
            yi=Double.parseDouble(hh);
          }
          else
          { 
            a.setText("");d1=0;
          }
        }
        else
        {
          if(b.length()>1)
          {
            String hh=b.substring(0,b.length()-1);
            a.setText(hh);
          }
          else
          {
            a.setText("");
          }
        }
        break;
      }
    }

    void jisuan(TextField a,String b)

    {
      if(a.getText().equals("")||flagsan==true)
      {
        fuhao=b;
      }//判断屏幕中值是否为空或者运算符是否已经用过一次,如果用过,flagsan为false,符号就等于你输入的最后一个运算符。
      else
      {
        if(flag)
        {
          yi=Double.parseDouble(a.getText());
          a.setText(null);
          flag=false;
          fuhao=b;
          flagwu=false;
        }

        else
        {
          er=Double.parseDouble(a.getText());
          a.setText(null);
          switch(fuhao)
          {
          case "+":yi=yi+er;a.setText(yi+"");break;
          case "-":yi=yi-er;a.setText(yi+"");break;
          case "*":yi=yi*er;a.setText(yi+"");break;
          case "/":yi=yi/er;a.setText(yi+"");break;
          case "=":jisuan(a,fuhao);yi=er;break;
          }
          fuhao=b;
          flager=false;
          flagsan=true;

          if(fuhao.equals("="))
          {
            flagwu=true;
            jilu=0;
          }
          else
          {
            jilu++;
            if(jilu%2==0)
            {
              flagwu=false;
            }
            else
            {
              flagwu=true;
            }
           }

        }

      }
    }
    }//class结束

    public class jisuanqidiaoyong

    {

      public static void main(String[] args)

       {

        new jisuanqi();
      }

    }

  • 相关阅读:
    python小程序:备份文件
    二叉树非递归后序遍历
    python拷贝文件小程序(windows)
    为什么虚拟 dom 会提高性能?
    shouldComponentUpdate 是做什么的,(react 性能优化是哪个周期函数?)
    react 生命周期函数
    调用 setState 之后发生了什么?
    React 中 keys 的作用是什么?
    Windows下如何更新 node.js
    SVN的Branch和Tag管理
  • 原文地址:https://www.cnblogs.com/shenhengjia/p/9063041.html
Copyright © 2011-2022 走看看