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

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

结对伙伴

需求分析

功能要求

1.自动生成题目

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

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

1级题目:2 + 5 =;

10 - 5 =

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

2.题目运算(判题)

可独立使用

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

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

3.支持真分数

可独立使用

实现分数算式的计算

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

可独立使用

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

若生成:2 + 5 =;

5 + 2 =

为同一题目

对需求的理解

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

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

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

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

后续拓展的可能性

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

设计思路

NML类图

2afe33f8e3e29c92764989b84b3fba71.png

思路:

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

相关过程截图

生成随机最简分数的类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

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

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

a+=Arraylist[b]+"\n";

return a;

}

}

测试类CreateTest运行截图

6f9ddf4c804df6ef0f1619ae0e36fab7.png

遇到的困难及解决方法

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

错误代码截图如下:

f40885abbc141e954062518572ef813b.png

测试类运行结果如下:

d88c95b87b044ea272f29b2e1a6fc625.png

改过后的代码截图如下:

54a530194f04f2f4de8edade45b4eb68.png

错因分析:错误代码中红圈标记的区域便是错误所在,该语句创建了一个空数组,与本意创建一个存放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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值