20162306陈是奇 四则运算结对编程总结

结对编程项目-四则运算-第二周阶段总结

需求分析

  • 本次实验的难点在于程序支持多数型计算,以及对题目难度(即限制指定运算符的产生)这是本周我们要主要研究的地方。

设计思路

  • 1、将算式分好等级类型。
    第1级,实现最简单的100以内整数的加减法;
    第2级,实现50以内整数的乘除法;
    第3级,实现分数的加减乘除,分子和分母都取0-50范围以内的整数;
    第4级,实现带有括号的算式的四则运算。预算结束后,代码统计正确题目数量,并计算正确率。

  • 2、利用if循环语句来产生不同等级算式。
    在循环最开始,输入所需要的题目的数量,把这个数量赋给定义好的变量number,这个变量用于确定产生题目的数量以及用于计算用户计算的正确率。

  • 3、整数运算部分。
    (1)在循环中产生两个随机数用于计算,再定义一个string数组,数组中存放运算符,通过随机数op来确定算式中需要的运算符。
    (2)有了运算数和运算符,生成算式。
    (3)在算式生成了以后,先进行计算并把正确值放在变量key中,在将用户输入的answer值与key比较,相等后在表示正确题目数量的right加1,不等输出提示错误并附上正确的值。(4)循环结束后,利用right和number计算正确率rate。最后提示测试结束并附上正确率。

  • 4、分数部分。
    (1)设计了一个分数类,这个分数的类中定义了产生分数的方法和分数计算的方法。
    (2)利用教材中的分数类,在第三个循环中,利用随机数随机生成分子分母,并将两个分数用于运算。
    (3)运算符的产生方法和上面的一样。
    (4)为了比较和输入方便,将输入值和正确值都转化为string类型,这样既能直接输入分数,又能直接去比较,之前我因为没有想好这个部分,一直将输入的值定义为int类型而导致运行错误。最后统计正确题目数量和正确率。

  • 5、分级运算部分。
    老师在课堂上讲过后缀表达式的相关知识,带括号的分级运算就是讲我们平时最常使用的中缀表达式转化成后缀表达式然后进行计算。我先写了一个实现后缀表达式计算的evaluator类,这个类之前学习dc时也涉及到过。后缀表达式能够计算,可是用户看见的是中缀表达式,所以这里还需要一个中缀表达式转化为后缀表达式的类。这两个类都利用栈的相关知识得以实现。我又弄了一个operator类,来规范运算符和括号,防止生成<((2-58*1>这样的算式。准备好这些,我将这些方法应用到第四个循环中,能够产生一个固定长度的分级运算式,最后统计正确的数量计算正确率。

有关分数

  • 设计一个分数类,首先定义了分数的分子和分母。在类中,又定义了四种计算方法,利用get方法得到分子和分母的具体的值进行计算。这个类中既包含了真分数也有假分数,都能够参与到计算中去。特别的是,类中也产生了分数的倒数,这个倒数也方便计算分数的除法。

20162306陈是奇 四则运算结对编程总结_第1张图片

实现过程中的关键代码解释

  • 在第三个循环当中,我开始是用scan.nextInt方法得到answer,将输入的数值类型和分数类型不统一,导致出现了错误。后来我利用InputStreamReader和BufferedReader这两个类中的方法,再利用readline方法读取输入的值。answer的类型转换成string类型。接着,我又将表示正确结果的key变量(RationNumber)用toString方法转化成string类型,相同类型的数值可以实现比较,代码得以正常运行。

20162306陈是奇 四则运算结对编程总结_第2张图片

运行过程截图

20162306陈是奇 四则运算结对编程总结_第3张图片
20162306陈是奇 四则运算结对编程总结_第4张图片
20162306陈是奇 四则运算结对编程总结_第5张图片

代码托管

20162305 20162306结对编程

遇到的问题和解决办法

  • 问题:如何实现中缀转化为后缀?
  • 解决办法:这是在第一阶段就一直困扰我们的问题,我和李昱兴对这部分的知识不是很熟,请教了张旭升同学,他对这部分的知识掌握得很好,他详细地给我讲解了后缀表达式和如何利用栈将中缀表达式转化成后缀表达式。通过他的讲解我感觉明白了很多,在此感谢张旭升同学。

对结对伙伴做出的评价

在本次结对编程中,我的结对伙伴李昱兴同学担任领航员的角色,负责构建整体框架,以及一些较难代码的研究,我作为一个驾驶员,负责完成一些代码键盘输入,以及一些代码问题排查。总的来说这次编程可谓“困难重重”,充分暴露了理论应用的不足,知识储备的匮乏,在结对学习中,李昱兴同学教会了我很多,同时对于不明白的问题,我们一起请教班里别的知识掌握很好地同学,也可以说是“大有裨益”。

一些感想

第一周的编程中,谢涛老师指出了我们在结对编程中存在的问题,这一周我们做出了一定的调整,从原先的交流不足“各自为战”,到本周,基本上都是两个人坐在一起写代码,一起寻找问题,一起解决问题,一起学习,一起总结分析。项目完成了,感觉自己学到了很多,也很感谢李昱兴同学不耐烦的讲解,感谢谢老师、娄老师屡次指出我们的问题,我们会在今后的学习中继续改正的。

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 45
Estimate · 估计这个任务需要多少时间 600 750
Development 开发 20 40
· Analysis 需求分析 (包括学习新技术) 30 60
· Design Spec 生成设计文档 50 60
Design Review 设计复审 (和同事审核设计文档) 60 90
· Coding Standard 代码规范 (为目前的开发制定合适的规范) 70 90
· Design · 具体设计 140 150
· Coding · 具体编码 120 180
· Code Review · 代码复审 50 90
· Test · 测试(自我测试,修改代码,提交修改) 40 60
Reporting 报告 60 60
· Test Report · 测试报告 20 30
· Size Measurement · 计算工作量 30 30
· Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 10 10

转载于:https://www.cnblogs.com/guominxiaocao/p/6886347.html

你可能感兴趣的:(20162306陈是奇 四则运算结对编程总结)