2020软件工程第三次作业03
GitHub项目地址:
软件工程 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
---|---|
这个作业的要求在哪里 | https://https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 |
这个作业的目标 | 完成Sudokudoku项目以及进行单元检测 |
作业正文 | 下文 |
其他参考文献 | 思否:https://segmentfault.com/、CSDN |
Personal Software Process Stages | 预估耗时 | 实际耗时 | |
---|---|---|---|
Planning | 计划 | 60分钟 | 60分钟 |
Estimate | 估计这个任务需多少时间 | 三十六小时 | 七十二小时 |
Development | 开发 | 五小时 | 二十一小时 |
Analysis | 需求分析(包括学习新技术) | 五小时 | 半天 |
Design Spec | 生成设计文档 | 两小时 | 两小时 |
Design Review | 设计复审 | 两小时 | 两小时 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 60分钟 | 30分钟 |
Design | 具体设计 | 两小时 | 五小时 |
Coding | 具体编码 | 五小时 | 七小时 |
Code Review | 代码复审 | 两小时 | 五小时 |
Test | 测试(自我测试,修改代码,提交修改) | 六小时 | 五小时 |
Reporting | 报告 | 60分钟 | 两小时 |
Test Report | 测试报告 | 60分钟 | 60分钟 |
Size Measurement | 计算工作量 | 60分钟 | 30分钟 |
Postmortem & Process improvement Plan | 事后总结,并提出过程改进计划 | 两小时 | 三小时 |
合计 | 36小时 | 72小时 |
二、解题思路
拿到这道题,首先想到的是我长到这么大竟然没有做过一张数独?(一些遗憾)那么我首先要做的一步就是了解数独规则。起初,为了不必要的麻烦第一反应就是暴力解,利用数字1~9在每一行、每一列、每一宫都只能出现一次的规则。所以我们用每个单元排除,在某个单元(行或列或区块)中找到能填入某一数字的唯一位置,换句话说就是把单元中其他的空白位置排除。首先从三宫格到第五宫格难度还是不大,但随着宫格的阶数增大运算越来越大。浪费了太多时间、、、、、、
1、了解规则
百度百科简介:
数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。
2、思路
考虑到如果从三宫格开始的话,代码中缺少不对宫的判断,不利于后续阶数的扩展,我想直接从常规九宫格的解题开始。
首先开始阶段.
要先初始化数独盘,在题目已经填写的数字基础上对我们要填的格子进行填充限制,如下图所示:
然后是数字填充阶段.
思路比较常规,回溯法,就是在已有的限制条件下,按顺序尝试1-9在格子中的填充,如果在尝试过程中填写到了数独盘的最后一格,则代表数独已经解出来了(此方法仅限提供的数独盘只有唯一解,如果有多解也只能输出一个),如果到达某格无法继续填充后续数字,需要移除之前放置的数字,然后继续尝试,如下图所示:
三、流程图
四、测试
五、性能测试
六、遇到的问题
1.Windows cmd命令行运行Java 错误:找不到或无法加载主类
使用Windows自带cdm窗口运行Java提示错误:
检查Java程序(“.java”后缀文件)代码内容:
- Java保存的文件名必须与类名一致;
- 如果文件中只有一个类,文件名必须与类名一致;
- 如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
- 另外,通过java文件使用javac命令生成class文件时,class文件的文件名也将与java文件的文件名保持一致。
2.在命令行窗口中对java类进行编译时idea的字符集和cmd的字符集不同是会报(0xAD)错误
解决方法:在javac后加入语句“-encoding UTF-8 ” 正确的话,请给个赞
七、结合构建之法谈经验感想
通过阅读《构建之法》,学会了做PSP,知道一个项目从开始到结束要经历怎样的过程,了解什么是性能测试和单元测试。性能测试对于程序的重要性不言而喻,但为什么要进行单元测试呢?最后能出结果不就行了吗?我的理解是:单元测试是对某个具体的单元(一个类或是一个方法)进行正确性测试,单元测试通过可以增加自己的信心。诚然,在简单的程序中,单元测试的作用并不明显,比如写一个计算a+b的程序,单元测试就没有太大的必要。但是,如果是一个大项目,需要大量的类和方法,那么如果不进行单元测试,结果出错了又该到哪里去找呢?又或是自己是否曾有过不知道自己写的方法到底能不能实现自己的要求的困扰呢?如果在写程序的时候进行单元测试,测试通过了,我们就有足够的信心往下继续写,当结果出错时,那些测试通过的部分显然不是查错的重点,这样的话,单元测试的作用就特别明显了。