java编写的计算器03

来源:互联网 发布:js uikit autocomplete 编辑:程序博客网 时间:2024/06/04 23:20
package an; import java.awt.*;import java.awt.event.*; public class qq extends WindowAdapter implements ActionListener{ double dResult=0; double dNowInput=0; double dMemory; int  n=0; //记载小数位数 int  nOperation=1; // 记录运算符类型 int  nBitsNum=0;  //记录总共输入的位数 boolean alreadyHaveDot=false; //已经有小数点? boolean keyAvailable=true; boolean alreadyClickedEqueal=false; //是否按下过"="? boolean isTempNowInput=false; //是否在计算出结果后直接按运算符将结果赋给了当前输入值?  Frame f; Panel p1,p2,p3,p4,p5,p6; TextField tf1,tf2; Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0; Button bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative; Button bBackspace,bCE,bC,bMR,bMS,bMC,bM;   public void display() {  f=new Frame("计算器");  f.setSize(280,213);  f.setLocation(200,200);  f.setBackground(Color.LIGHT_GRAY);  f.setResizable(false);    f.setLayout(new BorderLayout(3,3));    p1=new Panel(new GridLayout(1,3,5,5));  //用于存放backspace,ce,c三键  p2=new Panel(new GridLayout(4,5,5,5)); //用于存放数字区及附近共20键, 此处间隙设置可能不合理,以后调整  p3=new Panel(new GridLayout(5,1,5,5)); //用于存放MC,MR,MS,M+键及显示M状态文本框,此处间隙设置可能不合理,以后调整  p4=new Panel(new FlowLayout()); //用于存放p1,p2  p5=new Panel(new FlowLayout());  p6=new Panel(new FlowLayout());  p4.add(p1);  p4.add(p2);    tf1=new TextField(35);      //存放显示区  tf1.setText("0.");  tf1.setEditable(false);  p5.add(tf1);  f.add(p5,BorderLayout.NORTH);  f.add(p4,BorderLayout.CENTER);  f.add(p3,BorderLayout.WEST);    b1=new Button("1");  b2=new Button("2");  b3=new Button("3");  b4=new Button("4");  b5=new Button("5");  b6=new Button("6");  b7=new Button("7");  b8=new Button("8");  b9=new Button("9");  b0=new Button("0");    b1.addActionListener(this);  b2.addActionListener(this);  b3.addActionListener(this);  b4.addActionListener(this);  b5.addActionListener(this);  b6.addActionListener(this);  b7.addActionListener(this);  b8.addActionListener(this);  b9.addActionListener(this);  b0.addActionListener(this);    bDiv=new Button("/");  bSqrt=new Button("sqrt");  bMulti=new Button("*");  bMinus=new Button("-");  bPercent=new Button("%");  bPlus=new Button("+");  bReciprocal=new Button("1/x");  bEqual=new Button("=");  bDot=new Button(".");  bNegative=new Button("+/-");    bDiv.addActionListener(this);  bSqrt.addActionListener(this);  bMulti.addActionListener(this);  bMinus.addActionListener(this);  bPercent.addActionListener(this);  bPlus.addActionListener(this);  bReciprocal.addActionListener(this);  bEqual.addActionListener(this);  bDot.addActionListener(this);  bNegative.addActionListener(this);    p2.add(b7);  p2.add(b8);  p2.add(b9);  p2.add(bDiv);  p2.add(bSqrt);  p2.add(b4);  p2.add(b5);  p2.add(b6);  p2.add(bMulti);  p2.add(bPercent);  p2.add(b1);  p2.add(b2);  p2.add(b3);  p2.add(bMinus);  p2.add(bReciprocal);  p2.add(b0);  p2.add(bNegative);  p2.add(bDot);  p2.add(bPlus);  p2.add(bEqual);    bBackspace=new Button("Backspace");  bCE=new Button("CE");  bC=new Button("C");    bBackspace.addActionListener(this);  bCE.addActionListener(this);  bC.addActionListener(this);    p1.add(bBackspace);   p1.add(bCE);  p1.add(bC);    tf2=new TextField(2);  tf2.setEnabled(false);  tf2.setBackground(Color.LIGHT_GRAY);  bMC=new Button("MC");  bMR=new Button("MR");  bMS=new Button("MS");  bM=new Button("M+");    bMC.addActionListener(this);  bMR.addActionListener(this);  bMS.addActionListener(this);  bM.addActionListener(this);    p6.add(tf2);  p3.add(p6);  p3.add(bMC);  p3.add(bMR);  p3.add(bMS);  p3.add(bM);    f.setVisible(true);  f.addWindowListener(this);   } public void actionPerformed(ActionEvent e) {   //key 0 to 9  if(this.keyAvailable && e.getActionCommand().length()==1 && e.getActionCommand().compareTo("0")>=0 && e.getActionCommand().compareTo("9")<=0)  {   if(this.isTempNowInput)   {    this.dNowInput=0;    this.isTempNowInput=false;   }   this.nBitsNum++;    if(this.alreadyHaveDot==false)    this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand());   else   {     double temp=Double.parseDouble(e.getActionCommand());    for(int i=this.n;i<0;i++)    {          temp*=0.1;    }    this.dNowInput+=temp;    this.n--;   }   this.tf1.setText(Double.toString(this.dNowInput));  }  // key dot  if(this.keyAvailable && e.getActionCommand()==".")  {   if(this.alreadyHaveDot==false)   {    this.nBitsNum++;    this.alreadyHaveDot=true;    this.n=-1;    }  }  //key "+","-","*","/"  if(this.keyAvailable && e.getActionCommand()=="+" || e.getActionCommand()=="-" || e.getActionCommand()=="*" || e.getActionCommand()=="/")  {    if(this.alreadyClickedEqueal)   {    this.dNowInput=this.dResult;    this.isTempNowInput=true;   }   else   {    switch(this.nOperation)    {     case 1: this.dResult+=this.dNowInput; break;     case 2: this.dResult-=this.dNowInput; break;     case 3: this.dResult*=this.dNowInput; break;     case 4:     {      if(this.dNowInput==0)      {       tf1.setText("除数不能为零");       this.keyAvailable=false;      }      else this.dResult=this.dResult/this.dNowInput;     }    }    if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));    this.dNowInput=0;    }      if(e.getActionCommand()=="+")   {     this.nOperation=1;    }   if(e.getActionCommand()=="-")   {     this.nOperation=2;   }   if(e.getActionCommand()=="*")   {    this.nOperation=3;   }   if(e.getActionCommand()=="/")   {    this.nOperation=4;   }   this.nBitsNum=0;   this.alreadyClickedEqueal=false;  }  // key "+/-"   if(this.keyAvailable && e.getActionCommand()=="+/-")  {   this.dNowInput=0-this.dNowInput;   tf1.setText(Double.toString(this.dNowInput));     }  // key "C"   if(e.getActionCommand()=="C")  {   this.nBitsNum=0;   this.dResult=0;   this.dNowInput=0;   this.alreadyHaveDot=false;   this.n=0;   this.nOperation=1;   this.keyAvailable=true;   this.alreadyClickedEqueal=false;   tf1.setText("0.");  }  // key "CE"  if(e.getActionCommand()=="CE")  {   this.nBitsNum=0;   this.dNowInput=0;   this.alreadyHaveDot=false;   this.n=0;   this.nOperation=1;   this.keyAvailable=true;   tf1.setText("0.");  }    // key "sqrt"  if(this.keyAvailable && e.getActionCommand()=="sqrt")  {   if(this.alreadyClickedEqueal)   {    if(this.dResult>=0)    {     this.dResult=Math.sqrt(this.dResult);     tf1.setText(Double.toString(this.dResult));    }    else    {     tf1.setText("函数输入无效");     this.keyAvailable=false;    }   }   else   {    if(this.dNowInput>=0)    {     this.dNowInput=Math.sqrt(this.dNowInput);     tf1.setText(Double.toString(this.dNowInput));    }    else    {     tf1.setText("函数输入无效");     this.keyAvailable=false;    }   }   }  // key "1/x"  if(this.keyAvailable && e.getActionCommand()=="1/x")  {   if(this.dNowInput==0)   {    tf1.setText("除数不能为零");    this.keyAvailable=false;   }   else   {    this.dNowInput=1/this.dNowInput;    tf1.setText(Double.toString(this.dNowInput));   }  }  // key "="  if(this.keyAvailable && e.getActionCommand()=="=")  {   this.alreadyClickedEqueal=true;   switch(this.nOperation)   {    case 1: this.dResult+=this.dNowInput; break;    case 2: this.dResult-=this.dNowInput; break;    case 3: this.dResult*=this.dNowInput; break;    case 4:    {     if(this.dNowInput==0)     {      tf1.setText("除数不能为零");      this.keyAvailable=false;     }     else this.dResult=this.dResult/this.dNowInput;    }   }   if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));    }  // key "MS"  if(this.keyAvailable && e.getActionCommand()=="MS")  {   this.dMemory=this.dNowInput;   if(this.dMemory!=0)    tf2.setText("M");  }  // key "MC"  if(this.keyAvailable && e.getActionCommand()=="MC")  {   this.dMemory=0;   tf2.setText("");  }  // key "MR"  if(this.keyAvailable && e.getActionCommand()=="MR")  {   this.dNowInput=this.dMemory;   tf1.setText(Double.toString(this.dNowInput));  }  // key "M+"  if(this.keyAvailable && e.getActionCommand()=="M+")  {   this.dMemory+=this.dNowInput;   if(this.dMemory!=0)    tf2.setText("M");   else tf2.setText("");  }  // key "%"  if(this.keyAvailable && e.getActionCommand()=="%")  {   this.dNowInput=(this.dResult*this.dNowInput)/100;   tf1.setText(Double.toString(this.dNowInput));  }  // key "Backspace"  if(this.keyAvailable && e.getActionCommand()=="Backspace")  {   if(!this.alreadyClickedEqueal){    if(this.dNowInput!=0)    {     if(this.alreadyHaveDot)     {      if(this.n==-1)      {       this.alreadyHaveDot=false;       this.n=0;       }      else      {       String str,str1;       str=tf1.getText();       str1=str.substring(0,this.nBitsNum-1);       this.nBitsNum--;       this.n++;       this.dNowInput=Double.parseDouble(str1);       tf1.setText(Double.toString(this.dNowInput));            }     }     else     {      int temp;      temp=(int)(this.dNowInput/10);      this.dNowInput=(double)temp;      tf1.setText(Double.toString(this.dNowInput));     }    }   }   } } public static void main(String args[]) {  qq cal=new qq();  cal.display(); } public void windowClosing(WindowEvent e) {  System.exit(0); }}
原创粉丝点击