出题器2.0
有点不稳定的小学生出题器
- 211614387 叶宏奇
- 211614354 陈泓宇
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 600 | 700 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 100 | 120 |
• Design Spec | • 生成设计文档 | 30 | 35 |
• Design Review | • 设计复审 | 30 | 35 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 40 | 45 |
• Design | • 具体设计 | 40 | 45 |
• Coding | • 具体编码 | 30 | 35 |
• Code Review | • 代码复审 | 10 | 20 |
• Test | • 测试(自我测试,修改代码,提交修改) | ||
Reporting | 报告 | ||
• Test Repor | • 测试报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 30 | 35 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 34 | 27 |
合计 | 1758 |
二、需求分析
我通过百度的方式了解到,小学三年级数学有如下的几个特点:
- 特点1:三年级开始学习混合运算。
- 特点2:三年级的算法应该是比较偏向口算,如880/2。
经过分析,我认为,这个程序应当:
- 乘法除法尽量取整数
- 优先级时候考虑的除法的一些问题
三、设计
1. 设计思路
-
关键函数的流程图
-
在于逆波兰公式对于混合运算的成功有很大作用
2. 实现方案
- 准备工作:先在Github上创建仓库,克隆到本地。
- 运用逆波兰公式,将中缀表达式转化后缀表达式。
- 先读取栈中的优先级最高的符号。在依次将数字出栈进行运算
四、编码
请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
- 将代码全部设为静态私有变量,方便使用。
- 在逆波兰方法中要设立优先级。
2. 关键代码
//逆波兰表达式 后缀运算 用于混合运算
private static String ReversePolish (String[] strArr){
String str = "+-*/";
Stack<String> stack = new Stack<String>();
//遍历数组中的每一个元素
for(String s : strArr){
//如果是数字,放入栈中
if(!str.contains(s)){
stack.push(s);
}
else{
int a = Integer.valueOf(stack.pop());
int b = Integer.valueOf(stack.pop());
switch(s){
case "+" :
stack.push(String.valueOf(a+b));
break;
case "-" :
stack.push(String.valueOf(a-b));
break ;
case "*" :
stack.push(String.valueOf(a*b));
break;
case "/" :
stack.push(String.valueOf(a/b));
break ;
}
}
}
return stack.pop();
3. 代码规范
请给出本次实验使用的代码规范:
- 第一条:代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
- 第二条:类名使用UpperCamelCase风格。
- 第三条:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵循驼峰形式。
- 第四条:类型与中括号紧挨相连来定义数组。
- 第五条:抽象类命名使用 Abstract 或 Base 开头。
五、测试
- 输入 10 3
六、总结
- 刚看到题目时候,以为挺容易的,就是多一个运算。实际操作大大超乎运算了,不仅仅是多一个运算那么简单,还有运算的优先级,除法时除数不能为0。比一周的作业更具有挑战性了,不愧是结对作业。相互配合,才能更高效率完成。
- 这次的作业发现了几个难点,运算优先级括号的问题,还有除法的混合运算问题。括号的问题是还没有搞懂逆波兰公式的问题,除法问题因为解决的问题太多而导致无法实现。