evaluator java_Evaluator.java

/**

* 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

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值