需求分析(描述自己对需求的理解,以及后续扩展的可能性)
1.代码要满足加减乘除的运算,包含括号,支持真分数
2.对象选择生成四则运算题目的数量
3.只出题不答题
4.要输出文件
5.可以支持多运算符
6.将程序的过程写入文件
7.最好使用栈的方式,中缀转后缀
8.对象可以选择题目运算符的数量决定题目的难度
9.测试需要显示生成10000道题目的时间
10.不能生成重复题目
设计思路
1.先将代码的结构构建好,即先写输出题目的数量
2.通过for循环设计随机出现的题型,包括真分数题型
3.编写不同类型的题型
4.通过BufferedWriter
的类写入名字为LX的txt文件,建立一个栈,把每次循环生成的题目压入栈内
5.测试
6.编写一个中缀转后缀的类并编写测试代码使用,最后加入主代码中
7.将每一步生成的题目用list.add
压入栈中,写入文件
8.加入统计时间的代码
9.测试
实现过程中的关键代码解释
BufferedWriter bw = new BufferedWriter(new FileWriter("LX.txt"));
ArrayList<String> list = new ArrayList<String>();
中缀转后缀,建立栈,把for循环生成的题目使用 list.add("题目" + (i + 1)+":");
压入
for(String i:list){
bw.write(i);
bw.newLine();
}
bw.close();
把每次压入栈内的内容通过迭代器写入文件,并添加空行,最后关闭。
测试方法
通过输入数量决定生成题目的数量,并且题型随机,最后统计正确率,并且检查生成的txt文件是否包含了对应的四则运算题目。
运行过程截图
代码托管
遇到的困难及解决方法
问题:如何题目去重?
解答:搞不懂这个题目是什么意思,最开始想通过答案相同来去重,但是又无法达到题目要求的效果,所以不会(问了很多同学,都没有完美的方法)。
对结对的小伙伴做出评价及打分(重点指出需要改进的地方)
打分:打分的话呢我要给齐力锋51分,具体原因是:
1.我认为所谓的结对编程既然是结对,一个要求灵感和想法,一个要求实践,两个都同等重要,很难做出取舍
2.我认为打分这个环节完全没必要,它没有意义,打了分不会有任何作用。并且自己并不知道伙伴的所有付出情况,就比如一个任务结对编程,A和B两个同学通过讨论按照73分来分配编程任务,那是不是就代表A就理所当然地可以给自己打70分呢,答案是否定的,万一B做的内容是关键代码而A做的是很多重复代码呢?
3.打分会带来负面的影响,在这个看成绩的时代,谁不想多拿分呢,这项活动会不会诱导同学的自私心理呢?
评价:这周我和小伙伴在代码上下的功夫不深,因为很多科目都临近考试,把复习放在了此项任务前,我们没有合理地协调好时间,我和他都应该反思。我们在竭力解决如何代码去重的问题,但仍旧未果,这无疑是失败的。我们共同完成的程序达到了基本要求,主动输入运算符数量能生成20000+的题目,并且统计时间。希望我俩能花更多的时间进行讨论,共同进步。
学习感受
我不知道为什么这周还会有博客作业,因为娄老师几周前说过不会再有博客要写,所以没有关注这门课的最新动态。我把重心转移到了其他学科上,毕竟期末考试逼近,时间真的不多。要说学习感受的话就是很累,老师并不知道每一位同学是否学懂,也许班上只有一两位同学是跟上了节奏,我们多希望老师能够真正的让大部分学生学懂而不是一味的布置作业。
PSP记录
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 20 | 20 |
估计这个任务需要多少时间 | 360 | 720 |
生成设计文档 | 5 | 5 |
设计复审 (和同事审核设计文档) | 10 | 10 |
开发 | 30 | 30 |
需求分析 | 10 | 10 |
具体编码 | 240 | 360 |
测试 | 20 | 30 |
测试报告 | 60 | 30 |
事后总结, 并提出过程改进计划 | 30 | 20 |