燃烧我的脑细胞
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 50 |
• Estimate | • 估计这个任务需要多少时间 | 700 | 1150 |
Development | 开发 | 70 | 80 |
• Analysis | • 需求分析 (包括学习新技术) | 40 | 50 |
• Design Spec | • 生成设计文档 | 30 | 20 |
• Design Review | • 设计复审 | 40 | 30 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
• Design | • 具体设计 | 350 | 300 |
• Coding | • 具体编码 | 300 | 400 |
• Code Review | • 代码复审 | 30 | 40 |
• Test | • 测试(自我测试,修改代码,提交修改) | 40 | 40 |
Reporting | 报告 | 30 | 40 |
• Test Repor | • 测试报告 | 30 | 40 |
• Size Measurement | • 计算工作量 | 10 | 20 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 20 |
合计 | 1150 |
二、需求分析
我通过百度的方式了解到,小学一年级数学有如下的几个特点:
- 特点1
- 一年级上:主要还是在打计算的基础,包括20以内的进位加法,和20以内的减法,还不涉及退位减法,为了巩固好基础,也加强了连加连减的运算
- 一年级下:主要是20以上的加减的计算,包括进位和退位之间的复杂计算
- 二年级:主要学习表内乘法和除法,万以内数的读法和写法,万以内数的加减法(不进位、退位)含有加、减、乘、除的两步计算题和括号的认识,也就是简单的两步计算的四则混合运算的法则.简单的两步计算的应用题.
经过分析,我认为,这个程序应当:
- 使用的数字小于100
- 不能使用分数
三、设计
1. 设计思路
- 一年级二年级放一起做写的时候再想怎么分开(结果费了很长时间才做好)
2. 实现方案
写出具体实现的步骤
- 准备工作:先在Github上创建仓库,克隆到本地.
- 设计大纲:设置整体运算,分类输出
- 技术关键:实现根据年级进行输出
四、编码
是编码的过程中很不小心,很多次出现bug,一个字母一个字母的检查还是发现不了错误,最后没办法删了这个片段重新打,然后就过了,到最后也没发现错误在哪,以至于有种电脑坏了的感觉。而且忘记分类了,代码已经写出来了,这个样子写其实不太好分类,绞尽脑汁,改了不知道多少次才改好==。
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
- emmmm....第一次没分类跑回去改
-
第二次,输出不全,这个更麻烦,跑回去,重新打了几遍,也没怎么改(没印象有改动,因为看了代码感觉没啥问题),就过了
2. 关键代码
请展示一段程序的关键代码,并解释代码的作用
···
private static String[][] buildQuestion(int count, int grade){
if(count < 0){
count = 1;
}/*修改题目数量*/
if(grade < 1){
grade = 1;
}/*修改年级数量*/
if(grade==1) {
grade=1;
}
int limited = grade * 20;
Random random = new Random();
String[][] RT= new String[count][4];
for (String[] arr : RT) {
int wohenkun = random.nextInt(limited);
int danshimeizuohao = random.nextInt(limited);
if(grade==1) {/*分类*/
int woxiangshuijiao = random.nextInt(2);
if( woxiangshuijiao == 0 ) {
arr[1] = " + ";
arr[3] = String.valueOf(wohenkun + danshimeizuohao);
}/*加*/
else if(woxiangshuijiao==1 ) {
arr[1] = " - ";
arr[3] = String.valueOf(wohenkun - danshimeizuohao);
/*减*/
}}
if(grade==2) {
int woxiangshuijiao = random.nextInt(2);
if(woxiangshuijiao==1) {arr[1] = " × ";
arr[3] = String.valueOf(wohenkun * danshimeizuohao);/*乘*/
}
else {
arr[1] = " ÷ ";
while(danshimeizuohao == 0){
danshimeizuohao = random.nextInt(limited);
}
int remainder = (wohenkun%danshimeizuohao);/*余数*/
if(remainder == 0){
arr[3] = String.valueOf(wohenkun/danshimeizuohao);
}else{
arr[3] = String.valueOf(wohenkun/danshimeizuohao) + "..." + String.valueOf(remainder);/*除*/
}
}
}
arr[0] = String.valueOf(wohenkun);
arr[2] = String.valueOf(danshimeizuohao);
}
return RT;
}
···
3. 代码规范
请给出本次实验使用的代码规范:
- 代码中的命名均不能以下划线或美元符号开始,也不能一下划线或美元符号结束。
-第六条:任何二目、三木运算符的左右两边都需要加一个空格。 说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。
并人工检查代码是否符合规范
五、测试
请思考并记录你认为必要的测试点,并记录测试用例与测试结果
-测试点:一年级与二年级的题目是否分开
输入:5 1 输出:
(1) 14 - 2 =
(2) 6 + 7 =
(3) 11 + 17 =
(4) 3 + 16 =
(5) 6 + 17 =
------------------标准答案------------------
(1) 14 - 2 = 12
(2) 6 + 7 = 13
(3) 11 + 17 = 28
(4) 3 + 16 = 19
(5) 6 + 17 = 23
211506368 霍金池 2018年 09月 12日 04:25
六、总结
请总结过程中的教训和经验,思考
自己要学习的还很多,在编程的时候明显感觉到自己能力的不足,很多知识不会用甚至不知道,而且思路比较僵硬,有些解决方案要很久才能想出来,还有粗心的坏习惯,总是这里少写一点,那里少写一点。
经验,下次,一定一定一定要想好了在写T-T,改代码是真的伤脑子。