简单的四则运算计算器

2014-11-24 02:57:38 · 作者: · 浏览: 1

这是一个简单的四则运算计算器,不支持括号,没有做乘法的越界计算和除0等异常处理。
只是简单的描述一个四则运算过程。

Java代码
package SortSet;

import java.util.Stack;

public class OperationTest {

private static Stack opeStack = new Stack();
private static Stack numStack = new Stack();

private static StringBuilder in = new StringBuilder();
private static StringBuilder number = new StringBuilder();

public static void main(String[] args) {
System.out.println(cal("4-6*8-5+2*11"));
}

public static int cal(String input) {
in.append(input);
while (in.length() > 0) {
char temp = in.charAt(0);
in.delete(0, 1);
if (temp > '0' && temp < '9') {
number.append(temp);
} else {
if (!"".equals(number.toString())) {
int num = Integer.parseInt(number.toString());
numStack.push(num);
number.delete(0, number.length());
}
while (!opeStack.isEmpty() && !compare(temp)) {
int num2 = numStack.pop();
int num1 = numStack.pop();
char ope = opeStack.pop();
cal0(ope,num1,num2);
}
if (temp != '#' && compare(temp)) {
opeStack.push(temp);
}
}
}
if(number.length()>0){
int num = Integer.parseInt(number.toString());
numStack.push(num);
}
while(!opeStack.isEmpty()){
int num2= numStack.pop();
int num1= numStack.pop();

cal0(opeStack.pop(),num1,num2);
}

return numStack.pop();
}

public static void cal0(char ope,int num1 ,int num2){
switch (ope) {
case '+':
numStack.push(num1 + num2);
break;
case '-':
numStack.push(num1 - num2);
break;
case '*':
numStack.push(num1 * num2);
break;
case '/':
numStack.push(num1 / num2);
break;
}
}
public static boolean compare(char operation) {
if (opeStack.isEmpty())
return true;
char last = opeStack.peek();

switch (operation) {
case '+':
return false;
case '-':
return false;
case '*':
if (last == '+' || last == '-')
return true;
return false;
case '/':
if (last == '+' || last == '-')
return true;
return false;
}
return true;
}

}

执行结果为:
-27

说明:这里乘法问题需要考虑越界,最好用大整数得结果。另外除法也需要考虑除0异常。 这里采用StringBuilder减少了创建String的开销。 算法过程为将操作数压入操作栈,如果当前操作符优先级低于栈顶优先级,则计算,否则压入操作符栈。当最终计算式遍历完时,进行运算即可。

作者“dreaming架构师,深入理论,适当实践的一年”