20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算

一、码云链接

FAO项目的码云链接;

1、Git提交日志已经实现一个功能/一个bug修复的注释说明,如图所示;

2、测试代码并未上传;

3、主类位于Main.java中;

4、若有修改,仍会更新;

二、需求分析

之前在20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算里面已经对需求分析作出了总体的阐述,在此不作赘述。上一周,我们小组已经实现了在一个命令行程序中:

  • 计算小学四则运算题目(加、减、乘、除);
  • 支持整数、多运算符、真分数运算;

所以我们本周的主要任务(要实现的需求)是:

  • 自动生成小学四则运算题目(加、减、乘、除);
  • 统计学生的正确率

三、设计思路

之前在20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算里面已经指出了“如何计算带整数、多运算符、真分数的小学四则运算题目”的设计思路,在这里我主要分析关于如何实现本次需求的设计思路。

1、如何自动生成小学四则运算题目:Teacher类的设计

要随机生成一个四则运算题目,其总体思路大致分两种:

  • 设计随机生成一个中缀表达式,作为四则运算的题目;
  • 设计随机生成一个后缀表达式,再将其转化为中缀表达式,作为四则运算的题目;

比较这两种思路,我认为后者更加有利于括号的生成:当我们随机生成了一个后缀表达式,只需要逆向的求出计算顺序,即在正确的位置生成括号,从而生成相应的中缀表达式。

关于后者,我听说孙勖哲同学在网上找到了类似的代码,我之后会问他要链接,补充在这里。(我选择用前者实现的原因,主要是......怎么生成后缀表达式我没想到什么好算法,在网上也没找到。)

关于前者,如何随机生成一个中缀表达式,我的主要设计思路是:

  • 随机生成n个加减乘除运算符;
  • 在运算符之间以及表达式的开头结尾随机插入数字,形成一个没有括号的中缀表达式;
  • 允许在至少包含两个数字和一个运算符的情况下产生括号
  • 识别并且去掉没有意义的括号

我们小组以上述思路为指导,设计了Teacher类

  • CreStr(int n)方法随机生成一个String类包含n个加减乘除运算符;
  • InpNum()方法在运算符之间以及表达式的开头结尾随机插入数字,形成一个没有括号的中缀表达式;
  • InPar()方法随机产生括号
  • DelPar()方法识别并且去掉没有意义的括号
  • CreQue(int n)方法顺序执行上述方法,产生题目;
2、如何统计学生的正确率:Student类的设计

Student类的主要功能应该是包括:

  • 输入答案;
  • 核对答案是否正确;
  • 统计正确率;

综上所述,Student类的设计思路如下:

  • Answer(StringBuffer que)输入答案并且核对答案是否正确;
  • getPro()统计正确率;

四、UML类图

五、功能截图

六、结对感受

这一周的结对编程比起上一周更难的地方在于思路的设计,对于怎么产生一个中缀表达式,我们讨论了很久,一再地改进算法。虽然最后的算法不是最理想的设计(不是先产生后缀表达式),但是我们很开心,因为程序完全是我们自己设计的,也是我们自己一点点写的。最后统计一下,不加上测试代码,大约有600余行,有一点点成就感吧。

七、结对编程的照片


附:遇到的问题及部分解决方法

1、随机数的产生范围

rand.nextInt(n)里面的参数n是产生一个0 <= nextInt(n) < n的随机数,即0~n-1,参考链接rand.nextint()

需要注意rand是Random产生的对象,Random要用import java.util.Random;引入。

20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算的更多相关文章

  1. 20165205 2017-2018-2《Java程序设计》结对编程一 第二周总结

    20165205 2017-2018-2<Java程序设计>结对编程一 第二周总结 设计思路 编写主类Arithmetic4 编写ArithmeticFunc类来实现计算,其中包括:加.减 ...

  2. ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结

    20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

  3. 20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算

    一.码云链接 项目名称FAO 码云链接 二.需求分析 实现一个命令行程序: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确 ...

  4. 20165232 2017-2018-2《Java程序设计》结对编程一 第一周总结

    20165232 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

  5. 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周

    2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...

  6. 20165205 2017-2018-2《Java程序设计》结对编程一 第一周总结

    20165205 2017-2018-2<Java程序设计>结对编程一 第一周总结 需求分析 对输入的算式进行计算,要求满足一下条件: 支持整数运算,如2+5,47+7865. 支持多运算 ...

  7. 20165219 2017-2018-2《Java程序设计》结对编程一 第一周总结

    20165219 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

  8. 20172319 2018.04.11-16 《Java程序设计教程》 第6周学习总结

    20172319 2018.04.11-16 <Java程序设计教程>第6周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...

  9. 20172319 2018.04.11 《Java程序设计教程》第7周课堂测验(补写博客)

    20172319 2018.04.11 <Java程序设计教程>第7周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

随机推荐

  1. Modbus

    Modbus 串行链路协议是一个主-从协议.在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线. Modbus 通信总是由主节点发起.子节点在没有收 ...

  2. 怎么停止yum安装并kill进程

    1. ctrl + z 2. ps -ef | grep 正在安装的包名称 3. kill -9 进程Id

  3. Elastic Stack之kibana使用

    Elastic Stack之kibana使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客数据流走向:FileBeat ===>Redis  ===>log ...

  4. 【JS】js将 /Date(1518943415760+0800)/ 转换为2018-2-18 16:43:35格式

    function formatDate(dt) { var year = dt.getFullYear(); var month = dt.getMonth() + 1; var date = dt. ...

  5. 设计模式---接口隔离模式之代理模式(Proxy)

    一:概念 代理模式(Proxy Pattern)就是为其他对象提供一种代理以控制对这个对象的访问. 比如: 智能指针 为别人做嫁衣 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端 ...

  6. PHP中的表单传值

     前言:试想一下如果PHP没有了表单传值,那么就相当于一个没有表达能力的人,因此表单传值在php中是相当重要的,但是不难,接下来我们一起来探讨一下吧------> (一)什么是表单传值 概念:表 ...

  7. ibatis项目启动报错The string "--" is not permitted within comments【原】

    该错误主要就是因为xml中<!-- [注释]--> 注释与-->之间没有空格造成xml解析错误 sqlMapConfig.xml内容如下 <?xml version=" ...

  8. 【1】【leetcode-93】复原IP地址

    (不会,典型) 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135 ...

  9. MySQLMySql免安装版安装配置

    MySql免安装版安装配置,附MySQL服务无法启动解决方案 mysql 5.6.17 绿色版(免安装)安装配置教程 [mysql] # 设置mysql客户端默认字符集 default-charact ...

  10. ArcGis Python脚本——根据字段内容拆分要素类(shp)为多个

    其实,这就是批量执行了ArcToolbox 分析工具-筛选 功能. 先上代码,后做解说: # in_feature:待拆分要素类 # out_folderpath:输出路径,注意最后加“/”以与字段名 ...