用JAVA编写计算器程序.docx
用JAVA编写计算器程序用JAVA编写计算器程序 import java.awt.*; import java.awt.event.*; public class Calculation 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.getActionCpareTo("0")>=0 && e.getActionCpareTo("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) Calculation cal=new Calculation; cal.display; public void windowClosing(WindowEvent e) System.exit(0);