03作业小学四则运算
03小学大妈的无理要求
211506368霍金池211606359戴俊涵
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 600 | 700 |
• Estimate | • 估计这个任务需要多少时间 | 600 | 700 |
Development | 开发 | 500 | 530 |
• Analysis | • 需求分析 (包括学习新技术) | 300 | 300 |
• Design Spec | • 生成设计文档 | 60 | 60 |
• Design Review | • 设计复审 | 30 | 30 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 90 | 100 |
• Design | • 具体设计 | 400 | 420 |
• Coding | • 具体编码 | 20 | 20 |
• Code Review | • 代码复审 | 60 | 40 |
• Test | • 测试(自我测试,修改代码,提交修改) | 60 | 80 |
Reporting | 报告 | 30 | 60 |
• Test Repor | • 测试报告 | 15 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 800 |
二、需求分析
我通过万能的度娘了解到,小学一年级数学有如下的几个特点:
-
特点1
都是正整数,范围在0-100以内 -
特点2
乘除应该满足乘法表且不能有余数 -
特点3
小学三年级四则混合运算包括随机的括号产生
经过分析,我认为,这个程序应当: -
还要判断输入的不是正常数的报错情况
-
得数不能有负数小数
-
小学二年级是10以内的乘法口诀表的乘除法
-
得数不能有余数,小数或者负数
-
小学三年级的运算需要判断符号优先级
三、设计
1. 设计思路
说明你如何设计这个程序
- 首先输入参数判断年级还有题数,判断参数的输入是否符合题目要求
- 随机生成符号,并且当出现负数小数时舍去的情况
- 四则运算方法,以及分母为0的情况等
- out.txt文本的建立和写入
2. 实现方案
写出具体实现的步骤
- 准备工作:先在Github上创建仓库,然后fork,clone到本地并且下载git创建文件等
- 技术关键点:关于文本创建的一系列方法,清空文本的数据方法,以及判断是一年级还是二年级的方法
- 对于三年级括号的添加运算
- 对于优先级的判断为:输出:如果第二位符号是乘除法 要做特殊处理,即第一运算符号左右的数字前后加上括号,运算:
四、编码
- 扫描键盘输入
- 创建文件
- 判断题目数量范围是否正确是否符合
- 定义四则运算方法
- 判断文件创建是否异常
1. 调试日志
结果出现小数,然后我们直接调整为整数
题目中出现负数,没有想到解决办法,我们在随机数中定义了范围,结果不起作用
优先级出现问题,排版有点乱,找了一会改好的
2. 关键代码
...
private static int compareOperate(int first, int second){
int f = first <= 1 ? 0 : 1;
int s = second <= 1 ? 0 : 1;
return f-s;
}
private static String paraseOperateStr(int operate){
if(operate == 0){
return " + ";
}else if(operate == 1){
return " - ";
}else if(operate == 2){
return " × ";
}else if(operate == 3){
return " ÷ ";
}else{
throw new RuntimeException("无效的符号数字");
}
}
/*
* 计算出first和second之间的operate运算的字符串结果
* @param first 第一位参数
* @param second 第二位参数
* @param operate 运算
* @return 结果的字符串表示形式
*/
private static String calculate(int first, int second, int operate){
if(operate == 0){
return String.valueOf(first + second);
}else if(operate == 1){
return String.valueOf(first - second);
}else if(operate == 2){
return String.valueOf(first * second);
}else if(operate == 3){
return String.valueOf(first / second);
}else{
throw new RuntimeException("计算传入的参数有误!");
}
}
...
3. 代码规范
请给出本次实验使用的代码规范:
1.左大括号前不换行,后换行,右括号前换行。
2.源代码文件以文件内容中的最顶层的Java类命名,而且大小写敏感,文件扩展名为 .java,同时,文件的编码格式统一为UTF-8。
五、测试
|输入 |输出 |是否符合要求 |
| --------------------------------------- | -------------------------------- | -------- | -------- |
| 100,3 | 题目数量是否正确 |是 |
|100,1 | 一年级题目是否符合规范 |是 |
| 100,2 | 二年级题目是否符合规范 |是 |
| 100,3 | 三年级题目是否符合规范 |是 |
六、总结
通过结对组合我认识到了团队合作的重要性,培养了团队意识。虽然最终结果仍然有不少毛病和缺陷但是这已经是我和搭档所能完成的最大努力了。最后希望能降低作业的频率和难度以留出些时间让我们补充基础。最后感谢度娘对本次作业的大力支持。
结对工作照: