mini dc课堂练习补交
实验截图

实验代码
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)。 
mini dc课堂练习补交的更多相关文章
- 20155226 mini DC 课堂测试补交
		
由于电脑突然出了点问题,我没有完成mini DC这个测试,现将测试内容及结果补交 题目如下 提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 代码如下 MyDC.clas ...
 - 课堂限时训练-简易计算器·mini dc
		
课堂限时训练-简易计算器·mini dc 实验题目 采用后缀表达式法,设计一个建议计算器,实现+.-.*./四种运算. 代码实现 码云链接 关键代码部分及结果如下: 实验分析 首先,分析一下后缀表达式 ...
 - 《Java 程序设计》课堂实践项目-mini dc
		
<Java 程序设计>课堂实践项目-后缀表达式 课后学习总结 目录 改变 mini dc实验要求 后缀表达式介绍 课堂实践成果 课后思考 改变 修改了博客整体布局,改变了之前贴个截图粘个代 ...
 - mini dc与简易计算器 20165235
		
mini dc 任务内容 本次mini dc任务就是通过补充代码来实现整型数据的后缀表达式计算 相关知识 通过利用堆栈这一先进后出的数据结构来实现后缀表达式的计算.通过Stack<Integer ...
 - 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现
		
20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...
 - 20155310 2016-2017-2《Java程序设计》课堂实践补交
		
20155310 2016-2017-2<Java程序设计>课堂实践补交 第九周 程序设计中临时变量的使用 public class linshibianliang { public st ...
 - 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)
		
2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...
 - 关于第11周课堂mini dc的课堂练习
		
测试代码: 码云链接 import java.util.Scanner; public class MyDCTester { public static void main(String[] args ...
 - mini dc(选做)
		
一.任务详情 提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 二.源代码 1.MyDC类 import java.util.StringTokenizer; impor ...
 
随机推荐
- 2、Python文件操作工具 xlrd 工具
			
#打开excel文档workbook = xlrd.open_workbook('..\cye.xls',encoding_override='utf-8') #获取sheet页信息sheet = w ...
 - MySQL存储过程-遍历游标的例子
			
delimiter $$DROP PROCEDURE IF EXISTS pro_test ;CREATE PROCEDURE pro_test()begin DECLARE var_name var ...
 - jq实现从容器中间扩散的方式显示文字
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - BZOJ 1088 扫雷Mine 枚举初始状态
			
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1088 题目大意: 现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: ...
 - CSS样式命名规则
			
1.样式命名外 套: wrap主导航: mainnav子导航: subnav页 脚: footer整个页面: content页 眉: header页 脚: footer商 标: label标 题: t ...
 - MathUtils BigDecimal 数字工具类
			
package com.hxqc.basic.dependency.util; import org.apache.commons.lang.StringUtils; import java.math ...
 - POJ3304 Segments
			
嘟嘟嘟 题面就不说了,网上都有. 刚开始理解成了只要有不孤立的线段就算合法,结果就不会了--然而题中要求是所有线段至少有一个交点. 其实想一想就知道,问题转化为了是否存在一条直线和所有线段都有交点. ...
 - RSA加密算法和签名算法
			
RSA加密算法 RSA公钥加密体制包含如下3个算法:KeyGen(密钥生成算法),Encrypt(加密算法)以及Decrypt(解密算法). .密钥生成算法以安全常数作为输入,输出一个公钥PK,和一个 ...
 - Linux 下让终端走代理的方法
			
转载: https://blog.fazero.me/2015/09/15/%E8%AE%A9%E7%BB%88%E7%AB%AF%E8%B5%B0%E4%BB%A3%E7%90%86%E7%9A%8 ...
 - 一点一点看JDK源码(〇)
			
一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...