《Java 程序设计》课堂实践项目-后缀表达式 课后学习总结

目录

  • 改变
  • mini dc实验要求
  • 后缀表达式介绍
  • 课堂实践成果
  • 课后思考

改变

修改了博客整体布局,改变了之前贴个截图粘个代码就糊弄完的观念,这次布局和内容都有修改。

    加了一些之后也用到更多的实际例子,图片等都是再次运行之后截得细致的图片,电脑上也有原图。

mini dc实验要求

问:提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值

后缀表达式介绍

后缀表示法是波兰逻辑学家J.Lukasiewicz于1929年提出的,又叫做逆波兰表达式。

Linux命令dc可以用来对逆波兰式表达式进行求值,dc的打印类命令:

  • p:打印栈顶元素并换行
  • n: 打印栈顶元素并将其弹出栈,完毕后不换行
  • P: putchar ( int(栈顶元素) % 256) 并弹栈顶,不换行
  • f: 从栈顶至栈底打印栈中所有值,每个一行

dc的运算符:

  • +: 依次弹出w1与w2,将w2+w1压栈。精度为结果值精度
  • -: 依次弹出w1与w2,将w2-w1压栈
  • *: 依次弹出w1与w2,将w2*w1压栈。精度为结果值精度与precision中较大值
  • / : 依次弹出w1与w2,将w2/w1压栈。精度为precision
  • % : 依次弹出w1与w2,将w2-w2/w1*w1压栈
  • ~ : 依次弹出w1与w2,依次将w2/w1与w2%w1压栈
  • ^ : 依次弹出w1与w2,将w2^((int)w1)压栈。精度为w2精度与precision中较大值
  • | : 依次弹出w1 w2与w3,将 w3 ^ ((int)w2) (mod w1) 压栈。w1 w3 需为整数
  • v : 弹出w1,将sqrt(v)压栈。精度为precision

dc支持栈操作:

  • c : 清空栈
  • d : 将栈顶元素复制并压栈
  • r : 交换栈顶两元素 XXX

前中后三种表达式的介绍:

老师的代码就不贴在这里了,没必要故意增加博客内容,而且代码确实有点长

课堂实践成果

代码如下:

import java.util.Scanner; public class MyDCTester {     public static void main(String[] args) {         String expression, again;         int result;         try {             Scanner in = new Scanner(System.in);             do {                 MyDC evaluator = new MyDC();                  System.out.println("Enter a valid postfix expression: ");                  expression = in.nextLine();                  result = evaluator.evaluate(expression);                  System.out.println();                  System.out.println("That expression equals " + result);                  System.out.print("Evaluate another expression [Y/N]? ");                  again = in.nextLine();                  System.out.println();              }              while (again.equalsIgnoreCase("y"));          }  catch (Exception IOException) {              System.out.println("Input exception reported");          }      }  }

实验截图如下:

我们只需要将测试类部分补充上去即可。

需要注意以下两点我做实验时遇到的问题:

  • 输入后最表达式的时候,建议先把完整的中缀表达式书写出来接着在将其整改成课输入的后缀表达式。
  • 规则应当参考入栈出栈规则

可能做得不是没那么深入,没什么其他太多的问题了。

课后思考

介绍下上文所说的入栈出栈的规则,以及输入较为复杂的后缀表达式的分析方法:

(如图:例如:a(n-1)先入栈那么它就处于栈顶,因此它也最先出栈。)

课堂上的题目比较简单,举的例子也是非常浅显的例子,那么接下来输入一个较为复杂的表达式(1+2)*((8-2)/(7-4)),输入如下:

上面输入的就是(1+2)*((8-2)/(7-4))的后缀表达结果。

下面是用命令行对这段代码进行编译的结果:中间含有我的学号信息。(虽然除了一个0,但结果仍然是0)

学习反思及总结

讲道理这些东西要是放在平时学真的费不了很大功夫,那时候写个博客半个小时就糊弄完了,现在仔细写认真截图,理解含义发现问题解决问题,一篇博客还真起码需要两个小时时间。怪自己

《Java 程序设计》课堂实践项目-mini dc的更多相关文章

  1. 《Java 程序设计》课堂实践项目汇总链接

    1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...

  2. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  3. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  4. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

  5. 《Java 程序设计》课堂实践项目-Arrays和String单元测试

    <Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...

  6. 20155308 2016-2017-2《Java程序设计》课堂实践项目

    20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...

  7. # 20155308 2016-2017-2《Java程序设计》课堂实践项目 5月17日

    20155308 2016-2017-2<Java程序设计>课堂实践项目 5/17 本次因为git出现了问题,所以没有按时提交我的代码 问题一 在IDEA中对P145 MathTool.j ...

  8. 20155320 2016-2017-2《Java程序设计》第十二周课堂实践项目

    20155320 2016-2017-2<Java程序设计>第十二周课堂实践项目 1.修改教材P98 Score2.java, 让执行结果数组填充是自己的学号: 2.在IDEA中以TDD的 ...

  9. 20155321 2016-2017-2《Java程序设计》课堂实践项目2

    20155321 2016-2017-2<Java程序设计>课堂实践项目2 实践内容 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: ...

随机推荐

  1. #Alpha Scrum6

    Alpha Scrum6 牛肉面不要牛肉不要面 Alpha项目冲刺(团队作业5) 各个成员在 Alpha 阶段认领的任务 林志松:督促和监督团队进度 陈彬:博客编写 吴沂章.林锃寒:代码功能完善 林志 ...

  2. 理解活在Iphone中的那些App (四)

    App生存环境之宿主环境 终于开始说一些技术性的话题了,从这里开始的一些技术细节的东西,以前我也没有太刻意的注意过.为了写这个也是刚刚看了一点资料,如果有纰漏,恳请指出. 一个App生存的宿主环境主要 ...

  3. Jenkins在CentOS中的安装

    环境准备: tomcat,jdk 包准备:Jenkins的war包,下载路径:https://jenkins.io/download/ 把下载好的war包放在tomcat的webapps中,重启tom ...

  4. Java中this关键字使用小结

    当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this. 因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this ...

  5. ALICE源代码分析

    前言 ALICE(爱丽丝)事实上是"人工语言计算机实体"的英文缩写. 它以前在往年(2000年.2001年和2004年)的勒布纳人工智能奖角逐中三次获胜.并在其它年度中也获过骄人的 ...

  6. 2424. [HAOI2010]订货【费用流】

    Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...

  7. 【[HNOI2010]弹飞绵羊】

    发现好像写了一个洛谷上最快的分块 这道题曾经一度感觉非常不可做,因为\(LCT\)的标签以及没有什么思路的分块 但是自从\(yy\)出来一个错误的哈希冲突分块之后(修改的时候挂掉了),就发现这道题不就 ...

  8. 5、Android-跨程序共享数据--内容提供器

    Android数据持久化技术:文件存储.SharedPreferences存储.数据库存储 使用这些持久化技术保存的数据只能再当前的应用程序中访问 但是对于不同应用之间的可以实现跨程序数据共享的功能 ...

  9. 字符型设备驱动程序-first-printf以及点亮LED灯(一)

    学习使用 Linux 的  字符型设备驱动 来 进行 . 学习地址:http://edu.51cto.com/lesson/id-25710.html 第一步: 首先写 三个函数 ,2017年5月17 ...

  10. Kmalloc和Vmalloc的区别

    kmalloc()和vmalloc()介绍kmalloc()用于申请较小的.连续的物理内存1. 以字节为单位进行分配,在<linux/slab.h>中2. void *kmalloc(si ...