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

📄 calculator.java

📁 用JAVA实现的简单计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	  					number2 = new BigDecimal(Display.getText());
	  					if (afterSignalFlag){	  				
	  						secondNumber = true;      //若此时已经输入过+-*/号,则开放后的数作为第二运算数
	  						afterSignalFlag = false;	  
	  					}		  					
	  					begin = true;
	  					afterSqrt = true;
	  				}catch (NumberException e) {      //异常处理
	  					Display.setText("函数输入无效。");
	  					inputStop = true;
	  				}
	  			}
	  		}
	  	});
	  	//1/x键:
	  	Button1[14].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			if (!inputStop) {   //在能输入的情况下
	  				try {
	  					BigDecimal d = new BigDecimal(Display.getText());
	  					//若当前数为零,则抛出异常
	  					if (d.equals(BigDecimal.ZERO)){
	  						throw new NumberException();
	  					}	  					  					
	  					//除法运算:
	  					d = BigDecimal.ONE.divide(d,64,RoundingMode.HALF_UP);		  					
	  					Display.setText(output(d));		  		
	  					number2 = new BigDecimal(Display.getText());
	  					if (afterSignalFlag){	  	//若此时已经输入过+-*/号,则开放后的数作为第二运算数
	  						secondNumber = true;
	  						afterSignalFlag = false;	  						
	  					}		  					
	  					begin = true;
	  					afterSqrt = true;
	  				}catch (NumberException e) {    //异常处理
	  					Display.setText("除数不能为零。");
	  					inputStop = true;
	  				}
	  			}
	  		}
	  	});
	  	//%键:
	  	Button1[9].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			if (!inputStop) {    //在当前能输入的情况下
	  				BigDecimal d = new BigDecimal(Display.getText());
	  				d = d.multiply(number1).divide(new BigDecimal("100"));	  				
	  				Display.setText(output(d)); 	  					
	  				number2 = new BigDecimal(Display.getText());
	  				if (afterSignalFlag){	  	//若此时已经输入过+-*/号,则开放后的数作为第二运算数	
	  					secondNumber = true;
	  					afterSignalFlag = false;	  						
	  				}
	  				begin = true;
	  				afterSqrt = true;	  				
	  			}
	  		}
	  	});
	  	//+键:
	  	Button1[18].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			operate (1);
	  		}
	  	});
	  	//-键:
	  	Button1[13].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			operate (2);
	  		}
	  	});
	  	//*键:
	  	Button1[8].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			operate (3);
	  		}
	  	});
	  	//  /键:
	  	Button1[3].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			operate (4);
	  		}
	  	});
	  	Button1[19].addActionListener(this);	  	
	}	
	//成员函数:
	// =键:
	public void actionPerformed(ActionEvent event) {	
		if (!inputStop) {       //在当前能输入的情况下:
			//已经输入了第二运算数
			if (secondNumber) {	
				addSubMulDiv (number2);  //进行+-*/中的一种运算
			}
			//还没有输入第二运算数,但已经输入了运算符号
			else if (afterSignalFlag) {	
				//把第一运算数作为第二运算数
				number2 = new BigDecimal(number1.toString());
				addSubMulDiv (number1);				
			}
			//没有输入第二运算数,也没有输入运算符号,则把上次运算时的运算符号作为此次的运算符号,把上次运算的第二运算数作为此次的第二运算数
			else if ((!afterSignalFlag && !secondNumber && this.signalFlag != 0)||(afterSqrt && begin && this.signalFlag != 0)) {
				addSubMulDiv (number2);				
			}
			doubleFlag = false;
			afterSignalFlag = false;
			secondNumber = false;
			begin = true;
			afterSqrt = false;
		}
	}	
	//按下数字键,在屏幕上加一个数字:
	public void addANumber (Integer number) {
		if (!inputStop) {
			//开始新一次的运算,输入的数作为第一运算数:
			if (begin && !afterSqrt) {   
				Display.setText(number.toString() + ".");	
				doubleFlag = false;
				afterSignalFlag = false;
				secondNumber = false;
				begin = false;		
				afterSqrt = false;
			}
			//在开放,%,1/x运算后,放弃原来的第二运算数,以当前的输入作为第二运算数:
			else if (begin && afterSqrt) { 
				Display.setText(number.toString() + ".");	
				number2 = new BigDecimal(Display.getText());
				doubleFlag = false;
				afterSignalFlag = false;
				secondNumber = true;
				begin = false;		
				afterSqrt = false;				
			}
			else {
				//在输入+-*/号后,开始添加第二运算数
				if (afterSignalFlag ){
					Display.setText(number.toString() + ".");
					number2 = new BigDecimal(Display.getText());
					afterSignalFlag = false;
					secondNumber = true;
					afterSqrt = false;
				}
				//在输入数字的过程中,添加一个数字
				else {
					if (Display.getText().length() < MAX_LENGTH){
						if (doubleFlag) {
							Display.append(number.toString());
						}
						else {
							if (this.Display.getText().equals("0.")) {
								Display.setText(number.toString() + ".");
							}
							else {
								Display.insert(number.toString(), this.Display.getText().length() - 1);
							}
						}
						number2 = new BigDecimal(Display.getText());
					}
				}
			}
		}
	}
	//按下加减乘除后的运算
	public void operate (int signalFlag) {
		if (!inputStop) {
			//已经存在第二运算数,则执行运算,此时的作用相当于等号
			if (secondNumber) {
				secondNumber = false;
				afterSignalFlag = true;
				doubleFlag = false;
				begin = false;
				afterSqrt = false;
				addSubMulDiv (number2);
				this.signalFlag = signalFlag; //记录新的运算符号
				number2 = new BigDecimal(Display.getText());					
			}
			//还没有输入第二运算数时,不执行运算,只记录符号
			else {
				afterSignalFlag = true;
				secondNumber = false;
				doubleFlag = false;
				begin = false;
				afterSqrt = false;
				this.signalFlag = signalFlag;
				number1 = new BigDecimal(Display.getText());				
			}
		}
	}
	//加减乘除运算:
	public void addSubMulDiv (BigDecimal number2) {
		switch (this.signalFlag) {
			case 1: number1 = number1.add(number2);break;
			case 2: number1 = number1.subtract(number2);break;
			case 3: number1 = number1.multiply(number2);break;
			case 4: {
				try {							
					//除数为零时,抛出异常;
					if (number2.equals(BigDecimal.ZERO)) {						
						throw new NumberException ();
					}
					//得到的商作为第一运算数,有小数的话实行四舍五入原则
					number1 = number1.divide(number2, 34, RoundingMode.HALF_UP);
				}catch (NumberException e) {
					Display.setText("除数不能为零。");
					inputStop = true;
				}
				break;
			}					
		}
		if (!inputStop){
			Display.setText(output(number1));
		}			
	}
	//输出在屏幕上的数字
	public String output (BigDecimal a) {
		a = a.round(new MathContext(32));	//表示成32位
		a = a.stripTrailingZeros();			//去除小数点后多余的零
		try {			
			int c = a.toString().lastIndexOf("E");
			new BigDecimal(a.toString()).toBigIntegerExact();
			if (c == -1) {				
				return a.toString() + ".";
			}
			else {
				if (a.compareTo(new BigDecimal("99999999999999999999999999999999")) == -1) {
					return a.toPlainString() + ".";
				}
				return a.toString();
			}
		}catch (ArithmeticException e) {				
			return a.toString();
		}
	}
	
	public static void main(String[] args) {
		//界面为当前的计算机设置的界面
		try {
			UIManager.setLookAndFeel(
					UIManager.getSystemLookAndFeelClassName());
		}catch(Exception e){
			throw new RuntimeException(e);
		}
		Calculator calculator = new Calculator();		
	}
}

⌨️ 快捷键说明

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