20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

结对伙伴

需求分析

<一>功能要求

1.自动生成题目

  • 可独立使用(能实现自己编写测试类单独生成题目的功能)

  • 可生成不同等级题目,类似于:

    1级题目:2 + 5 =;

    10 - 5 =

    之类的两个数,一个运算符的题目

2.题目运算(判题)

  • 可独立使用

  • 实现中缀表达式转为后缀表达式并计算

  • 判断用户答题正误,并输出正确结果

3.支持真分数

  • 可独立使用

  • 实现分数算式的计算

3.题目去重(扩展需求,加分项)

  • 可独立使用

  • 实现对自动生成表达式的去重:如下

    若生成:2 + 5 =;

    5 + 2 =

    为同一题目

<二>对需求的理解

1.要有一个生成随机题目的类,题目中的数可能分数,也可能是整数。 2.要有一个将中缀表达式转化为后缀表达式的类

3.要有一个计算后缀表达式的类

4.要有一个判断题目的类

5.将以上类进行组合写出产品代码

<三>后续拓展的可能性

具体的题目去重思路还没有产生,问题应该不大。

设计思路

  • NML类图

  • 思路:

    要有一个能够生成随机最简分数的类,并将它运用到生成随机题目的类中去,同时生成的题目中数字和运算符之间要有一个空格符,方便在转换为后缀表达式的时候使用栈。最后要实现交互,即让客户回答问题,然后系统判断是否正确并告诉客户。

相关过程截图

  • 生成随机最简分数的类Fraction
public class Fraction {
int numerator, denominator; public Fraction() {
numerator= (int) (Math.random()*51);
denominator= (int) (Math.random()*51);
if(denominator==0)
denominator=1;
reduce();
} public void reduce() {
if (numerator != 0) {
int common = gcd(Math.abs(numerator), denominator); numerator = numerator / common;
denominator = denominator / common;
}
} private int gcd(int num1, int num2) {
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1; return num1;
}
public String getFraction()
{
String result;
if(numerator==0)
result="0";
else
if(denominator==1)
result=numerator+"";
else
result=numerator+"/"+denominator;
return result;
}
}
  • 生成相应个数表达式的类Create
public class Create {
String[]Arraylist;
int num,rate;
public Create(int num ,int rate)
{
this.num=num;
this.rate=rate;
Arraylist=new String[num];
}
public String questionRate(int a)
{
String express="";
String[]OC={"+","-","×","÷"}; for (int c=0;c<a;c++) {
Fraction b = new Fraction();
String d=b.getFraction();
String e=OC[(int) (Math.random() * 4)];
while (d=="0"&&e=="÷") {
Fraction f=new Fraction();
d = f.getFraction(); }
express +=d+" "+e+ " ";
} Fraction c=new Fraction();
String e=c.getFraction();
while (express.charAt(4*rate-1)=='÷'&&e=="0")
{
Fraction d=new Fraction();
e=d.getFraction();
} express+=e+" "+"=";
return express;
}
public void QuestionNum(){
Create F=new Create(num,rate);
for(int a=0;a<num;a++)
Arraylist[a]=F.questionRate(rate);
} public String[] getArraylist() {
return Arraylist;
}
public String getArraylist2(int a)
{
String b;
b=Arraylist[a];
return b;
} public String toString() {
String a="";
for (int b=0;b<num;b++)
a+=Arraylist[b]+"\n";
return a;
}
}
  • 测试类CreateTest运行截图

遇到的困难及解决方法

  • 刚开始编写用于生成整数类型的题目的类时出现逻辑错误,导致运行测试类时出现越界。

  • 错误代码截图如下:

  • 测试类运行结果如下:

  • 改过后的代码截图如下:

  • 错因分析:错误代码中红圈标记的区域便是错误所在,该语句创建了一个空数组,与本意创建一个存放num个String型表达式的数组相违背。从而出现越界的现象。而改过之后的代码中是在构造函数中对数组进行了实例化,也就达到目的了。

对结对的小伙伴做出评价

结对小伙伴黄宇瑭童鞋的优点就是能够很认真的倾听我的一些想法,同时能够对我的想法提出自己的补充建议,而且他非常的耐心,乐于助人,在我敲代码敲累了的时候他会主动帮我接力。缺点的话可能就是在编写代码的时候对自己的要求不够严苛,有时会出现一些输入错误。整体上来说,与黄宇瑭童鞋的结对学习甚是愉快,希望在接下来的结对编程项目中再接再厉,共同进步!!

PSP时间统计

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 70
Estimate 估计这个任务需要多少时间 30 30
Development 开发 600 700
Analysis 需求分析 (包括学习新技术) 120 180
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 20
Design UML 设计项目UML类图 60 90
Coding 具体编码 180 210
Code Review 代码复审 180 120
Test 测试(自我测试,修改代码,提交修改) 120 120
Size Measurement 计算工作量(实际时间 30 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 60
合计 1440 1620

20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结的更多相关文章

  1. 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...

  2. 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...

  3. 20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172324 姓名 :曾程 伙伴第一周博客地址: 对结对伙伴的评价:一个很优秀的同学,在这次项目中 ...

  4. 20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有 ...

  5. 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...

  6. 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...

  7. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...

  8. 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

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

    一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

随机推荐

  1. ArcGIS中的坐标系统定义与投影转换(转)

    ArcGIS中的坐标系统定义与投影转换 ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正 ...

  2. Java 并发系列(一) ThreadPoolExecutor源码解析及理解

    ThreadPoolExecutor 它是线程池最核心的类, 这里对核心的方法做简要的剖析(会持续更新),以加深对线程池运行原理的理解. 1. 核心成员变量及相关方法 // ctl非常重要,用整型表示 ...

  3. 电商 APP 下单页(俗称车2) 业务流程概要设计

    购物车是电商APP的一个关键功能点,一般购物车包含 3-4 个页面,分别是: 1.购物车的商品列表页 2.商品下单页 3.订单付款页面 4.订单付款成功页面 由于现有购物车逻辑相对混乱,这里重新整理一 ...

  4. 【OC底层】AssociatedObject 关联对象

    如何实现给分类“添加成员变量”? 默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中.但可以通过关联对象来间接实现 关联对象提供了以下API 1> 添加关联对象 void objc_s ...

  5. MacOS在Finder中建立快速新建txt的workflow

    Mac是不支持右键直接新建txt的,因此有时候需要用到文本文稿的时候会比较麻烦.   因此这里提供一种个人认为比较方便的方法,让Mac也能很简洁的新建txt文件.   工具介绍: Automator ...

  6. 外部容器出现塌陷现象(伪类after、before的使用)

    伪类after.before的使用 ::before//伪元素 :hover//伪类 #all::after{ display:table; clear:both; content:"&qu ...

  7. Diy智能家居-1.基于esp8266的语音控制系统(开篇)

    目录Diy智能家居-1.基于esp8266的语音控制系统(开篇) https://blog.csdn.net/arno1988/article/details/82628589 Diy智能家居-2.基 ...

  8. zlib库的编译及使用

    * 打开网址http://zlib.net/ 下载zlib源码, * 解压压缩包,进入目录:C:\Users\Administrator\Desktop\zlib-1.2.11\zlib-1.2.11 ...

  9. 使用promis串行化异步操作

    该代码可在chrome下运行,对于低版本浏览器可以引入Q库 function async1() { var defer = Promise.defer() setTimeout(function(){ ...

  10. 课下测试补交(ch01、ch02、ch07)

    课下测试补交(ch01.ch02.ch07) 课下测试ch01 1.Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比.(B) A . 正确 B . 错误 解析:课本 ...