/**
* Created by hp on 2017/5/16.
*/
import java.util.StringTokenizer;
import java.util.Stack;
public class Evaluator {
/** constant for addition symbol */
private final char ADD = '+';
/** constant for subtraction symbol */
private final char SUBTRACT = '-';
/** constant for multiplication symbol */
private final char MULTIPLY = '*';
/** constant for division symbol */
private final char DIVIDE = '/';
/** the stack */
private Stack stack;
public Evaluator() {
stack = new Stack();
}
public int evaluate (String expr)
{
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer (expr);
while (tokenizer.hasMoreTokens())
{
token = tokenizer.nextToken();
//如果是运算符,调用isOperator
if (isOperator(token))
{
int b = stack.pop();
//从栈中弹出操作数2
int a = stack.pop();
//从栈中弹出操作数1
result = evalSingleOp(token.charAt(0),a,b);
//根据运算符和两个操作数调用evalSingleOp计算result;
stack.push(result);
//计算result入栈;
result = stack.push(result);
}
else//如果是操作数
{
stack.push(Integer.parseInt(token));
}
//操作数入栈;
}
return result;
}
private boolean isOperator (String token)
{
return ( token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/") );
}
private int evalSingleOp (char operation, int op1, int op2)
{
int result = 0;
switch (operation)
{
case ADD:
result = op1 + op2;
break;
case SUBTRACT:
result = op1 - op2;
break;
case MULTIPLY:
result = op1 * op2;
break;
case DIVIDE:
result = op1 / op2;
}
return result;
}
public String check(String toCheck){
//检查左右括号数量是否相等
int a = count(toCheck, '(');
int b = count(toCheck, ')');
while (a != b){
toCheck = toCheck.concat(" )");
a = count(toCheck, '(');
b = count(toCheck, ')');
}
return toCheck;
}
public int count (String string, char operate){
//用于统计符号出现次数
int countNumber = 0;
for (int i=0; i
if (operate == string.charAt(i))
countNumber++;
}
return countNumber;
}
}
一键复制
编辑
Web IDE
原始数据
按行查看
历史