码迷,mamicode.com
首页 > 其他好文 > 详细

自己写的计算机

时间:2018-05-20 14:19:00      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:awt   sed   bsp   this   add   imp   listen   npe   set   

经过自己的多轮测试,应该是没有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();
  }

}

自己写的计算机

标签:awt   sed   bsp   this   add   imp   listen   npe   set   

原文地址:https://www.cnblogs.com/shenhengjia/p/9063041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!