java编写的简易计算器

     此次编写java计算器,是基于栈的使用实现的。


编写难点:主要 是实现运算符的优先级问题,通过创建了四个栈stack1,stack2,stack3,stack4.  stack1和stack3分别用来存储数值的,stack2和stack4用来存放运算符。

我的思想是将连续输入的数字组成一个整数存入到stack1中,将运算符存入stack2中,至于stack3则是已经遍历过一次栈,将优先级高的乘和除计算后存入stack3数据栈中,

stack4栈其实只存放了加法和减法运算符。本计算器没有实现左括号,右括号的功能。


核心代码如下:

public void actionPerformed(ActionEvent e) {
		//将数据与运算符都存进去了
		String str = null;  
		if(!(str = e.getActionCommand()).equals("=")){
			if(str.equals(".")){
				flag = true;
			}
			if(!str.equals("*")&&!str.equals("\\")&&!str.equals("+")&&!str.equals("-")){
				if(flag){
					if(!str.equals(".")){	
					stackNum = (float) (stackNum+Integer.parseInt(str)/(Math.pow(10,t)));
					t=t+1;
					}
				}
				
				else if(!flag){
					stackNum = stackNum*10+Integer.parseInt(str);
				}
				k = stackNum;
			}
			 if(str.equals("*")||str.equals("\\")||str.equals("+")||str.equals("-")){
					stack1.push(stackNum);
					flag = false;
					jtf.setText(jtf.getText()+Float.valueOf(stackNum).toString());
					stackNum  = 0;
					char[] c = str.toCharArray();
					switch (c[0]) {
					case '*':
						jtf.setText(jtf.getText()+Character.valueOf('*').toString());
					    stack2.push('*');  
					    break;
	
					case '\\':
						jtf.setText(jtf.getText()+Character.valueOf('\\').toString());
						stack2.push('\\');
					    break;
					
					case '+':
						jtf.setText(jtf.getText()+Character.valueOf('+').toString());
						stack2.push('+');
			            break;
			        
					case '-':
						jtf.setText(jtf.getText()+Character.valueOf('-').toString());
						stack2.push('-');
					    break;
					    
					default:
					   break;
					}//switch
				}//else if		 
		}//if
	
		//
		if(e.getActionCommand().equals("=")){
			stack1.push(k);
			System.out.println(k);
			System.out.println("stack1的大小"+stack1.getSize());
			System.out.println("stack2的大小"+stack2.getSize());
			jtf.setText(jtf.getText()+Float.valueOf(k).toString());//都存进了stack1了
			while(!stack1.isEmpty()){//12+3*5,1+1,3*3,1+1*1+1\1
				char c[] = stack2.pop().toString().toCharArray();
				if((Character.valueOf(c[0]).toString()).equals("*")){
					float num = Float.parseFloat(stack1.pop().toString());
					float num1 = Float.parseFloat(stack1.pop().toString());
					stack3.push(num1*num);
				}
				if((Character.valueOf(c[0]).toString()).equals("\\")){
					float num = Float.parseFloat(stack1.pop().toString());
					float num1 = Float.parseFloat(stack1.pop().toString());
					stack3.push(num1/num);
				}
				else if((Character.valueOf(c[0]).toString()).equals("+")||(Character.valueOf(c[0]).toString()).equals('-')){
					stack4.push(c[0]);
				}
				else if(!stack1.isEmpty()&&stack2.isEmpty()){
					stack3.push(stack1.pop());
				}
			}//while
			
			float number2 = Float.parseFloat( stack3.pop().toString());
			while(!stack3.isEmpty()){
				char c2[] = stack4.pop().toString().toCharArray();
				switch (c2[0]) {
				case '+':
					number2 = Float.valueOf(stack3.pop().toString())+number2;	
					break;
				case '-':
					number2 = Float.valueOf(stack3.pop().toString())-number2;
					break;
				default:
					break;
				}//switch
			}
			if(stack3.isEmpty()){
				jtf.setText(Float.valueOf(number2).toString());
			}
		}
	}//actionPerformed



完整代码链接(不需要资源分):http://download.csdn.net/detail/tan313/7817541

你可能感兴趣的:(java编写的简易计算器)