程序开发初体验
Posted xzh0717
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序开发初体验相关的知识,希望对你有一定的参考价值。
程序开发初体验
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 10 |
? Estimate | ? 估计这个任务需要多少时间 | 20 | 10 |
Development | 开发 | 370 | 380 |
? Analysis | ? 需求分析 (包括学习新技术) | 30 | 20 |
? Design Spec | ? 生成设计文档 | 60 | 20 |
? Design Review | ? 设计复审 | 10 | 10 |
? Coding Standard | ? 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
? Design | ? 具体设计 | 30 | 30 |
? Coding | ? 具体编码 | 180 | 220 |
? Code Review | ? 代码复审 | 20 | 30 |
? Test | ? 测试(自我测试,修改代码,提交修改) | 30 | 40 |
Reporting | 报告 | 60 | 60 |
? Test Repor | ? 测试报告 | 40 | 30 |
? Size Measurement | ? 计算工作量 | 10 | 10 |
? Postmortem & Process Improvement Plan | ? 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 450 |
二、需求分析
我通过网上查询的方式了解到:
(1)小学一年级数学有如下的几个特点:
特点1:掌握100以内加减法
特点2:未学习小数和负数
经过分析,我认为,这个程序应当:
加法和减法使用的数字小于100(加法计算结果也不能超出)
小学还未学习负数(减法计算结果也不能出现负数)
小学一年级尚未学习乘除,所以四则运算暂时不做乘除运算。
(2)小学二年级数学新增如下的几个特点:
特点1:掌握乘法口诀表
特点2:10以内的除法
经过分析,我认为,这个程序更新后应当:
加法和减法使用的数字小于100(加法计算结果也不能超出)
小学还未学习负数(减法计算结果也不能出现负数)
乘法和除法使用的数字小于10(乘法计算结果可以超出)
三、设计
1. 设计思路
这个程序就一个类,四个函数,main函数接收输入的信息,之后调用check函数检查输入的信息是否有误,有误给出提示,无误则继续调用create函数创建out .txt输出文件。最后调用work函数出题和给出答案。
2. 实现方案
准备工作:先在Github上创建仓库,克隆到本地,在eclipse上编写代码。
- 技术关键点:梳理一下设计思路,可能遇到哪些技术关键点
命令行参数输入
参数正则匹配
重定向输出到文件
四、编码
1. 调试日志
首先开始构思出大致的框架,在查询百度和API文档了解随机数的生成后,大致框架已经成型。刚开始题目和答案我是用字符串数组存储的,容易出现数组越界问题,所以我换成用字符串存储。至于输出到文件第一反应也是转变为字节流循环输出。后来再温习I/O流代码时,发现以前实验延申有重定向,在上网学习后,文件输出就解决了。最后就是解决参数输入错误的BUG,在众多输入可能都要考虑的情况下,字符正则匹配相对其它容易得多。
2. 关键代码
/**
* 检查输入的参数是否合法
* @param strN:题数
* @param strGrade:年级
* @return 合法返回true,否则返回false
*/
public static boolean check(String strN, String strGrade) {
// 若题数不为数字
if (!strN.matches("\\d*")) {
// 若题数为负号+数字(即为负数)
if (strN.matches("-\\d*")) {
System.out.println("输入一个正确的数字哦,不能为负");
return false;
} else {
// 题数为数字外的字符
System.out.println("输入的题数必须是数字!");
return false;
}
} else {
// 字符串类型的题数转成整型
n = Integer.parseInt(strN);
if (n > 100) {
System.out.println("输入的题数过大,体谅下小学生哦");
return false;
}
}
if (!strGrade.matches("[1-2]")) {
System.out.println("年级只能是 1 或者 2 哦");
return false;
} else {
grade = Integer.parseInt(strGrade);
}
return true;
}
/**
* 出题和给出答案至文件
*/
public static void work() {
int num1, num2, op;
String str = "", result = "";
Random rand = new Random();
for (int i = 1; i <= n; i++) {
// 随机生成0~100的数
num1 = rand.nextInt(101);
num2 = rand.nextInt(101);
if (grade == 1) {
// 一年级只有加减
op = rand.nextInt(2);
} else
// 二年级涉及乘除
op = rand.nextInt(4);
// op = 0加法,1减法,2乘法。3除法
if (op == 0) {
// 若两数之和超过100,不合理跳过
if ((num1 + num2) > 100) {
// 跳过但是不能减少题数,循环变量需要减一
i--;
continue;
}
// 字符串更新,需注意windows系统下,换行符为“
”
str += "(" + i + ") " + num1 + " + " + num2 + "
";
result += "(" + i + ") " + num1 + " + " + num2 + " = " + (num1 + num2) + "
";
} else if (op == 1) {
// 两数之差出现负数,不合理跳过
if ((num1 - num2) < 0) {
// 同理,循环变量需要减一
i--;
continue;
}
str += "(" + i + ") " + num1 + " - " + num2 + "
";
result += "(" + i + ") " + num1 + " - " + num2 + " = " + (num1 - num2) + "
";
} else if (op == 2) {
// 乘除数值为0~10
num1 = rand.nextInt(11);
num2 = rand.nextInt(11);
// 同理,两数之积超过100,不合理跳过
if ((num1 * num2) > 100) {
i--;
continue;
}
str += "(" + i + ") " + num1 + " * " + num2 + "
";
result += "(" + i + ") " + num1 + " * " + num2 + " = " + (num1 * num2) + "
";
} else {
num1 = rand.nextInt(11);
num2 = rand.nextInt(11);
// 同理,除数不能为0,不合理跳过
if (num2 == 0) {
i--;
continue;
}
str += "(" + i + ") " + num1 + " / " + num2 + "
";
if (num1 % num2 != 0) {
result += "(" + i + ") " + num1 + " / " + num2 + " = " + (num1 / num2) + "..." + (num1 % num2)
+ "
";
} else {
result += "(" + i + ") " + num1 + " / " + num2 + " = " + (num1 / num2) + "
";
}
}
}
System.out.println(str);
System.out.print(result);
}
3. 代码规范
请给出本次实验使用的代码规范:
第一条:代码中的命名均不能以下划线或美元符号开始,也不能一下划线或美元符号结束。
第二条:代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
第三条:注释的双斜线与注释内容之间有且仅有一个空格。
第四条:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵循驼峰形式。
第五条:杜绝完全不规范的缩写,避免忘文不知义。
第六条:不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
第七条:大括号的使用约定。如果是大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则:左大括号前不换行。左大括号后换行。右大括号前换行。右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
第八条:左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。详见第5条下面正例提示。
第九条:循环体内,字符串的连接方法,使用StringBuilder的append方法进行扩展。
并人工检查代码是否符合规范
五、测试
测试用例 | 预期结果 | 实际结果 |
---|---|---|
xzh 1 | 输入的题数必须是数字! | 同预期结果 |
1000 1 | 输入的题数过大,体谅下小学生哦 | 同预期结果 |
-123 2 | 输入一个正确的数字哦,不能为负 | 同预期结果 |
0000000001 2 | 正确文档输出 | 同预期结果 |
10 56 | 年级只能是 1 或者 2 哦 | 同预期结果 |
10 -1 | 年级只能是 1 或者 2 哦 | 同预期结果 |
10 xzh | 年级只能是 1 或者 2 哦 | 同预期结果 |
10 2 | 正确文档输出 | 同预期结果 |
六、总结
以前都没有整个项目的体验,这次经历了整个小项目的过程,刚开始完全没有头绪,不知到从何处下手。拿到题目就和往常一样开始考虑写代码,以致于需求分析不到位,导致多次修改代码。代码规范是很重要的,要养成良好的编程习惯。感觉这次做的思路不是很清晰,没有规划好第一步做什么,第二步做什么,有点草率。这次吸取教训和经验,相信自己往后会做的更好。
以上是关于程序开发初体验的主要内容,如果未能解决你的问题,请参考以下文章