需求分析(描述自己对需求的理解,以及后续扩展的可能性)
1.代码要满足加减乘除的运算,包含括号,支持真分数
2.对象选择生成四则运算题目的数量
3.手动输入结果
4.题目要可以验证结果正确与否并统计正确率
5.要输出文件
6.可以支持多运算符
7.将程序的过程写入文件
8.最好使用栈的方式,中缀转后缀
9.对象可以选择题目运算符的数量决定题目的难度
设计思路
1.先将代码的结构构建好,即先写输出题目的数量
2.通过for循环设计随机出现的题型,包括真分数题型
3.编写不同类型的题型并检验
4.编写题目出现后的输入及对应的语句,最后调用NumberFormat
类统计正确的概率
5.通过BufferedWriter
的类写入名字为LX的txt文件,建立一个栈,把每次循环生成的题目压入栈内
6.测试
7.编写一个中缀转后缀的类并编写测试代码使用,最后加入主代码中
实现过程中的关键代码解释
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文件是否包含了对应的四则运算题目。
运行过程截图
代码托管
遇到的困难及解决方法
1.关于如何将程序运行结果写入txt文件的问题
解决过程:我先翻阅了教材上IO流的代码,里面只教了如何通过循环写入多行代码,便舍弃。于是我通过网上搜索,找到了一段代码
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入你要保存的字符:");
//读取一个文本行
String str=br.readLine();
//创建一个新的File对象
File f=new File("testio.txt");
//创建一个新的文件testio.txt
FileOutputStream fos=new FileOutputStream("testio.txt");
//写到文本
fos.write(str.getBytes());
//关闭输出流
fos.close();
通过实践发现这种方式每次写入一行内容都要生成一个fos,相比书上的方法较为简单,但仍有麻烦之处。不过为我后来的代码提供了思路,这里不得不提一下张旭升和王彪同学,在张旭升和王彪同学帮助下,帮我梳理了代码结构,并提出了迭代器和栈的方法解决该问题,再次感谢。
对结对的小伙伴做出评价(重点指出需要改进的地方)
这次我和小伙伴齐力锋同学有了明确分工,我负责完善四则运算的代码和分数类及其测试,齐力锋则时写中缀转后缀的类和自动生成题目的类。在第一周我们设计了不用栈的方式来进行四则运算,第二周我们则另外做了一个可以用栈方式的四则运算,所以我们用了两种方法来完成这个题目。我认为齐力锋同学的设计思路很有逻辑性,并且自己总结并做了中缀转后缀的类,很厉害。我认为我们都需要更多地动手实践,只有多做才能多学嘛。
对于搭档代码的理解
关于搭档的中缀转后缀,通过深入学习,有了自己的理解。他利用了调度场算法,先建立一个堆栈,存储暂时还不需要处理的运算符,根据运算符级别的高低决定顺序,例如,先扫描级别较高的运算符,若遇见括号则先压入,直到扫描到右括号再把左括号之后的所有弹出。
PSP记录
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 60 | 60 |
估计这个任务需要多少时间 | 360 | 720 |
生成设计文档 | 5 | 5 |
设计复审 (和同事审核设计文档) | 5 | 5 |
开发 | 30 | 30 |
需求分析 | 20 | 10 |
具体编码 | 240 | 360 |
测试 | 20 | 30 |
测试报告 | 60 | 30 |
事后总结, 并提出过程改进计划 | 20 | 10 |