calculate java,calculate.java

package imple;

import java.util.*;

public class calculate {

private Map> priorityMap = new HashMap>();

private Stack optStack = new Stack();

private Stack numStack = new Stack();

public double calcualte1(String exp) {

StringTokenizer vn = new StringTokenizer(exp);

while (vn.hasMoreTokens()) {

String token = vn.nextToken();

transversion(token);

}

return numStack.pop();

}

public double calcualte(String exp) {

char[] strExp = exp.toCharArray();

for(char a: strExp){

transversion(""+a+"");

}

return numStack.pop();

}

private void transversion(String token) {

while (false == "=".equals(optStack.peek()) || false == token.equals("=")) {

if (true == judgenum(token)) {

numStack.push(Double.parseDouble(token));

break;

} else {

String priority = priority(optStack.peek(), token);

if ("

optStack.push(token);

break;

} else if ("=".equals(priority)) {

optStack.pop();

break;

} else {

double res = calculate(optStack.pop(), numStack.pop(), numStack.pop());

numStack.push(res);

}

}

}

}

private double calculate(String opt, double a1, double a2) {

if ("+".equals(opt)) {

return a2 + a1;

} else if ("-".equals(opt)) {

return a2 - a1;

} else if ("*".equals(opt)) {

return a2 * a1;

} else if ("/".equals(opt)) {

return a2 / a1;

} else {

throw new RuntimeException("unsupported operator:" + opt);

}

}

private boolean judgenum(String token) {

int LEN = token.length();

for (int ix = 0 ; ix < LEN ; ++ix) {

char ch = token.charAt(ix);

if (ch == '.') {

continue;

}

if (false == judgenum(ch)) {

return false;

}

}

return true;

}

private boolean judgenum(char ch) {

if (ch >= '0' && ch <= '9') {

return true;

}

return false;

}

public String priority(String op1, String op2) {

return priorityMap.get(op1).get(op2);

}

public calculate() {

optStack.push("=");

Map subMap = new HashMap();

subMap.put("+", ">");

subMap.put("-", ">");

subMap.put("*", "

subMap.put("/", "

subMap.put("(", "

subMap.put(")", ">");

subMap.put("=", ">");

priorityMap.put("+", subMap);

// -

subMap = new HashMap();

subMap.put("+", ">");

subMap.put("-", ">");

subMap.put("*", "

subMap.put("/", "

subMap.put("(", "

subMap.put(")", ">");

subMap.put("=", ">");

priorityMap.put("-", subMap);

// *

subMap = new HashMap();

subMap.put("+", ">");

subMap.put("-", ">");

subMap.put("*", ">");

subMap.put("/", ">");

subMap.put("(", "

subMap.put(")", ">");

subMap.put("=", ">");

priorityMap.put("*", subMap);

// /

subMap = new HashMap();

subMap.put("+", ">");

subMap.put("-", ">");

subMap.put("*", ">");

subMap.put("/", ">");

subMap.put("(", "

subMap.put(")", ">");

subMap.put("=", ">");

priorityMap.put("/", subMap);

// (

subMap = new HashMap();

subMap.put("+", "

subMap.put("-", "

subMap.put("*", "

subMap.put("/", "

subMap.put("(", "

subMap.put(")", "=");

//subMap.put("#", ">");

priorityMap.put("(", subMap);

// )

subMap = new HashMap();

subMap.put("+", ">");

subMap.put("-", ">");

subMap.put("*", ">");

subMap.put("/", ">");

//subMap.put("(", "

subMap.put(")", ">");

subMap.put("=", ">");

priorityMap.put(")", subMap);

// #

subMap = new HashMap();

subMap.put("+", "

subMap.put("-", "

subMap.put("*", "

subMap.put("/", "

subMap.put("(", "

//subMap.put(")", ">");

subMap.put("=", "=");

priorityMap.put("=", subMap);

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值