这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 |
这个作业的目标 | 数独编程测试 |
作业正文 | https://www.cnblogs.com/ynzj123/p/12593170.html |
参考文献 | www.baidu.com |
1.Github 项目地址:https://github.com/yinianzhijian1/20177676
2.PSP 表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 30 |
Estimate | 估计这个任务需要多少时间 | 300 | 720 |
Development | 开发 | 10 | 50 |
Analysis | 需求分析 (包括学习新技术) | 20 | 40 |
Design Spec | 生成设计文档 | 20 | 30 |
Design Review | 设计复审 | 30 | 15 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 50 | 50 |
Design | 具体设计 | 80 | 220 |
Coding | 具体编码 | 120 | 140 |
Code Review | 代码复审 | 30 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 40 | 80 |
Reporting | 报告 | 30 | 60 |
Test Repor | 测试报告 | 30 | 60 |
Size Measurement | 计算工作量 | 10 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 315 | 750 |
3. 解题思路
看到作业题目的时候是一脸懵,然后开始搜资料,看了很多个博客,才对数独有点了解,然后开始构思,想着从三个宫格开始填数字。他的要求是在 9 * 9 的宫格中,填写的数据为 1-9,每行不能重复,每列也不能重复,组成的9个小宫格中也不能重复。所以我们可以创建一个数组让for循环帮我们去遍历可以填的数字,然后命令行输入参数的形式输入,文件输出。(其实我也有点晕。。)
优势:有友好提示,对找不到文件,或者阶数不对,都会有try catch处理;代码比较简单,都是用了很简单的函数像是fileReader等;变量名通俗易懂,像是phraseWordNum表示有m阶,inputFileName表示输入的文件等。
流程图:
4. 设计实现过程
用cmd运行指令
然后得到了数独结果
5. 改进程序性能
从趋势图看,我们的cpu负载一直没有超过20%,最高峰的有两个参数,绿色的代表进行占用的负载为0%,系统占用的为25左右%,这说明目前应用cpu负载没问题.
绿色是空闲的大小,蓝色是已使用的大小,一半蓝和一半绿代表已经提交的内存大小,绿色和蓝色相差高度很高,这说明内存性能很好
图中看出"char[ ]"用的最多,数量26958,大小2389648kb。可以改进,优化算法,然后减少字符的创建。
看代码看了近一个小时,觉得代码写的很规范,导包没有用*号;= 的左右会空格;也有try catch对-m数据不对,没找到文件的处理;用if输出指令格式不对的提示;boolean进行行列的判断。我觉得我暂时找不到代码的问题,它现在可以满足编程需要,不用改进了。
6. 代码说明
创建数字和必要的量
inputFileName是输入的文件,outputFileName是输出的文件,sudoku[][]用来存放数独的数据,phraseWordNum表示有m阶,sortedPrintNum表示待解答盘面数目。
读入文件写入数组循环
用FileReader()读取输入文本的内容,FileOutputStream()写输出文本内容,用多个for循环实现数字的写入。
异常处理
当报错FileNotFoundException e1时会提示未找到指定文件。
值的判定
用for循环,进行多次if的值的比较(-i -o -m -n)。
行判断
用for循环,然后判断行是否到了m个,然后结束。
7. 心历路程与收获
写这个作业经历了很多,这两天一起床就开始做蹲在电脑前查资料,可以说是一种废寝忘食的认真程度。本来想用vs code查了资料,又觉得Java更好,下载了三遍,终于下好了idea(第一遍是下了zip不会安装,第二遍是下载了收费版装不了)。然后查找代码的算法和资料,又去找怎么用jprofiler怎么性能测试资料。。。
把上节课的代码测试和github给复习了一遍,加深印象。可以说下次作业都可以在心里有明确的行动指导,而不用去查这么多资料。还学习了数独的代码收获很多!
8.总结:
做完作业,觉得还是挺难的。首先是这个题目比以前做的要难一些,然后需要对代码做性能分析和改进。最主要的事代码难,以至于后面的进程这么慢,还要加油,把Java学的更好,就可以更快做完作业了!
最后作业写的并非理解透彻,但是我至少发现原来我可以在几天之内不休息,一直努力的做一个目标,一件事情。(后果就是手指抽筋,手臂痛,背痛,头晕,哈哈!)