⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculation.java

📁 这是一个功能不错的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("        calculation");
		f.setSize(280,240);
		f.setLocation(200,200);
		f.setBackground(Color.LIGHT_GRAY);
		f.setResizable(false);
		f.setLayout(new BorderLayout(1,1));
		
		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(" ");
		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[]) {
		Calculation cal=new Calculation();
		cal.display();
	}
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -