2 Star 0 Fork 0

20162305李昱兴 / 2016230520162306

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Evaluator.java 2.89 KB
一键复制 编辑 原始数据 按行查看 历史
20162305李昱兴 提交于 2017-06-04 14:41 . generate formula
/**
* 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<Integer> stack;
public Evaluator() {
stack = new Stack<Integer>();
}
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<string.length(); i++ ){
if (operate == string.charAt(i))
countNumber++;
}
return countNumber;
}
}
Java
1
https://gitee.com/lyxwatm/2016230520162306.git
git@gitee.com:lyxwatm/2016230520162306.git
lyxwatm
2016230520162306
2016230520162306
master

搜索帮助