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

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

1、码云连接

FAO项目的码云连接;html

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

二、测试代码并未上传;git

三、主类位于Main.java中;算法

四、如有修改,仍会更新;编程

2、需求分析

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

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

因此咱们本周的主要任务(要实现的需求)是:测试

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

3、设计思路

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

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

要随机生成一个四则运算题目,其整体思路大体分两种:命令行

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

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

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

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

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

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

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

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

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

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

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

4、UML类图

5、功能截图

6、结对感觉

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

7、结对编程的照片


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

一、随机数的产生范围

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

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

相关文章
相关标签/搜索