无括号简单四则运算器

转载请注明作者与出处:francsico http://www.cnblogs.com/franciscolv/archive/2011/11/20/2255860.html.

package SortSet;

import java.util.Stack;

public class OperationTest {

private static Stack<Character> opeStack = new Stack<Character>();
private static Stack<Integer> numStack = new Stack<Integer>();

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;
default:
return false;
}
}

}



posted @ 2011-11-20 11:22  franciscolv  阅读(304)  评论(0编辑  收藏  举报