20162326 齐力锋 挑战出题
2017-06-04 23:15
281 查看
需求分析(描述自己对需求的理解,以及后续扩展的可能性)
1.代码要满足加减乘除的运算,包含括号,支持真分数2.对象选择生成四则运算题目的数量
3.只出题不判题
4.题目要可以验证结果正确与否并统计正确率
5.要输出文件
6.可以支持多运算符
7.将程序的过程写入文件
8.最好使用栈的方式,中缀转后缀
9.对象可以选择题目运算符的数量决定题目的难度
10.测试需要显示生成10000道题目的时间
11.不能生成重复题目
设计思路
1.先将代码的结构构建好,即先写输出题目的数量2.通过for循环设计随机出现的题型,包括真分数题型
3.编写不同类型的题型
4.通过BufferedWriter的类写入名字为LX的txt文件,建立一个栈,把每次循环生成的题目压入栈内
5.测试
6.编写一个中缀转后缀的类并编写测试代码使用,最后加入主代码中
7.将每一步生成的题目用list.add压入栈中,写入文件
8.加入统计时间的代码
9.测试
UML类图
代码托管
运行及测试截图
遇到的困难及解决方法
问题:如何题目去重?解答:我和搭档选择用根据答案去重的方式
关键代码
import java.io.*; import java.util.*; /** * Created by Lenovo on 2017/6/1. */ public class ExpressionGenerator { public static void main(String[] args) throws IOException { Sort sort = new Sort(); List<String> list = new ArrayList<String>(); List<String> list1 = new ArrayList<String>(); List<String> list2 = new ArrayList<String>(); Conversion con = new Conversion(); Evaluation eva = new Evaluation(); PrimaryTitle title = new PrimaryTitle(); String str1 = args[0]; String str2 = args[1]; String str3 = args[2]; String l1 = null, result2 = null, result1, result3 = null, result4 = null; int i = 0; if (args.length == 0) { System.out.println("No command line arguments"); } else { FileOutputStream out = new FileOutputStream("D:\\untitled1\\bin\\" + str3); i = Integer.parseInt(str2); for (int s = 0; s < Integer.parseInt(str1); s++) { int x = 0; Random random = new Random(); int q = random.nextInt(2) + 1; if (str2.equals("1")) { q = 3; } if (q == 1) { l1 = title.promber3(i + 1, 9, 4, 1);// result1 = con.storage(l1);// result3 = eva.calculate(result1);// result2 = sort.sorting(result1); if (list.size() != 0) { for (int w = 0; w < list.size(); w++) { if (result2.equals(list.get(w))) { result4 = eva.calculate(list2.get(w)); if (result3.equals(result4)) { x = 1; s --; break; } } } } if (x == 0) { list.add(result2); list1.add(l1);// list2.add(result1); } } else if (q == 2) { String l2 = title.promber1(i + 1, 9, 4, 1); result1 = con.storage(l2); result2 = sort.sorting(result1); result3 = eva.calculate(result1); if (list.size() != 0) { for (int w = 0; w < list1.size(); w++) { if (result2.equals(list.get(w))) { result4 = eva.calculate(list2.get(w)); if (result3.equals(result4)) x = 1; s--; break; } } } if (x == 0) { list.add(result2);// list1.add(l2);// list2.add(result1);// } } else if (q == 3) { String l2 = title.promber1(i + 1, 9, 4, 1); result1 = con.storage(l2);// result2 = sort.sorting(result1);// if (list.contains(result2)) { s --; } else{ list.add(result2);// list1.add(l2);// } } } String s = " "; for (int i1 = 0; i1 < list1.size(); i1++) { s += list1.get(i1) + "\r\n"; } String t = s.trim(); byte[] b = t.getBytes(); out.write(b); out.close(); } } }
对结对的小伙伴做出评价及打分(重点指出需要改进的地方)
打分:我的搭档给我打了51分,我想给他打52分。我这一次还是做领航员的角色,提供思路,他来具体实现代码。这周我做的不够好,思路不够清楚,在去重这里,我只想到了根据答案去重,这是我的失误。评价:我们在竭力解决如何代码去重的问题,最后还是选择根据答案来去重。我们共同完成的程序达到了基本要求,主动输入运算符数量能生成20000+的题目,并且统计时间。我会和搭档再接再历,继续提高。
PSP记录
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 50 | 60 |
估计这个任务需要多少时间 | 500 | 720 |
设计复审 (和同事审核设计文档) | 5 | 5 |
开发 | 30 | 30 |
需求分析 | 20 | 10 |
具体编码 | 400 | 540 |
测试 | 20 | 30 |
测试报告 | 60 | 30 |
事后总结, 并提出过程改进计划 | 30 | 20 |
相关文章推荐
- 20162312Java结对编程之挑战出题
- 阶段编程四则运算(挑战出题)
- 20162330 结对编程项目-四则运算(挑战出题)
- 20162326 齐力锋 实验四
- 结对编程之四则运算挑战出题
- 四则运算挑战出题
- 四则运算挑战出题
- 结对编程-四则运算(挑战出题)成绩及点评
- 20162326 齐力锋 2017-2018学期 Bag类的补写博客
- 20162326 齐力锋 2016-2017-2 《程序设计与数据结构》第八周学习总结
- 20162302 - 20162319 结对编程项目-四则运算(挑战出题)(第三周)
- 结对编程四则运算(挑战出题)实验总结 20162305
- 20162306陈是奇 四则运算结对编程(挑战出题)总结
- 20162326 齐力锋 2016-2017-2《程序设计与数据结构》课程总结
- 20162326_齐力锋_ 第4周学习总结
- 20162326齐力锋 第九周课堂实验-简易计算器博客补写
- 20162326 齐力锋 实验三
- 结对编程-四则运算(挑战出题)
- 结对编程项目-四则运算 挑战出题
- 20162304 阶段编程四则运算(挑战出题)