实验截图

实验代码

import java.util.StringTokenizer;
import java.util.Stack; public class MyDC {
/**
* 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 MyDC() {
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)) {
op2=(stack.pop()).intValue();//从栈中弹出操作数2
op1=(stack.pop()).intValue();//从栈中弹出操作数1
result=evalSingleOp(token.charAt(0),op1,op2);//根据运算符和两个操作数调用evalSingleOp计算result;
stack.push(new Integer(result));//计算result入栈;
} else//如果是操作数
stack.push(new Integer(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;
}
}

代码链接

练习总结

  • 1、对于isOperator()的调用不够明确。
  • 2、计算中间结果的代码为result=evalSingleOp(token.charAt(0),op1,op2);
  • 3、操作数入栈需进行强制类型转换Integer.parseInt(token)

最新文章

  1. nginx基本配置和参数说明
  2. Daily Scrum – 1/18
  3. jQuery自定义Web页面鼠标右键菜单
  4. 项目中oracle存储过程记录——经常使用语法备忘
  5. iOS开发——C篇&amp;文件操作
  6. Entity Framework - Func引起的数据库全表查询
  7. cocos2d-x 发动机分析:程序如何开始和结束?
  8. D6
  9. 仿微信抢红包(js 转)
  10. UNIX环境高级编程——线程属性
  11. Callable与Future
  12. 微信小程序代码大全 - 小程序开发福利
  13. redis的主从机制 master&amp;slave
  14. 4.C#虚方法virtual详解
  15. 剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?
  16. str_replace 批量查找替换字符串
  17. Solr合并索引方式
  18. python之sys.stdout、sys.stdin
  19. mysql 中 时间和日期函数
  20. eclipse导出maven依赖的jar包

热门文章

  1. C++计算器项目的初始部分
  2. 2016424王启元 Exp6信息搜集与漏洞扫描
  3. java反序列化Commons-Collections5分析
  4. 当网页失去焦点时改变网页的title值
  5. 【nodejs】创建第一个应用
  6. 【JavaScript】富文本编辑器
  7. Kali-linux使用社会工程学工具包(SET)
  8. 使用Apache HttpClient 4.5设置超时时间
  9. UICollectionViewFlowLayout 的 estimatedItemSize 属性
  10. TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点