您的位置:首页 > 编程语言 > Java开发

java编写的简易计算器

2014-08-25 19:31 183 查看
此次编写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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: