结对作业1
211606369 蔺皓雯 211606349 蔡晨旸
小学三年级数学题MathExam369
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 600 | 760 |
• Estimate | • 估计这个任务需要多少时间 | 600 | 760 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 60 | 50 |
• Design Spec | • 生成设计文档 | 30 | 30 |
• Design Review | • 设计复审 | 20 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
• Design | • 具体设计 | 20 | 20 |
• Coding | • 具体编码 | 300 | 360 |
• Code Review | • 代码复审 | 60 | 60 |
• Test | • 测试(自我测试,修改代码,提交修改) | 120 | |
Reporting | 报告 | 20 | 30 |
• Test Repor | • 测试报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 10 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 20 | |
合计 | 760 |
二、需求分析
我通过上网查阅的方式了解到,小学三数学有如下的几个特点:
- (1)一位数的乘、除法; 0的乘法;连乘;除数是一位数的除;0除以一个数用乘法验算除法;连除。
- (2)两位数的乘、除法;个乘数是两位数的乘法(另一个乘数一般不超过三位数);
- 除数是两位数的除法; 连乘、连除的简便算法。
- (3)四则混合运算。;小括号的使用。
经过分析,我认为,这个程序应当:
- 运算符在2~4个,且至少两个不同的运算符
- 可以加括号
- 减法运算的结果不能有负数
- 除法运算除数不能为0,不能有余数
- 保留1、2年级的出题要求
三、设计
1. 设计思路
-
首先要初始化文件函数,创建文件输出流,将题目和答案存入out.txt文件
-
使用随机数生成题目和算式
-
输出题目和结果
-
关键函数的流程图
2. 实现方案
- 准备工作:先在Github上创建仓库,克隆到本地,fork到自己的仓库,下载到本地仓库
-技术关键点:创建文件输出流,生成四则混合运算,要有括号
四、编码
- 在编写完运算以后,要将题目和答案都存入文件
- 要加入括号,输入的参数顺序可以变,运算符的个数要确定,结果不能有负数,因为时间比较仓促再加上知识点比较薄弱,只能用最笨的方法一步一步写,导致bug太多,输出的结果也有很多问题。
1. 调试日志
- 在for循环里输出最后答案的式子没能写入到文件里,
- 导致计算结果出现了问题,目前正在不断优化中
2. 关键代码
String c[] ={"+","-","×","÷"};
byte contentInBytes[];
Random rand=new Random();
for (int i=0;i<=n;i++) {
int a=rand.nextInt(c.length);
String resultChar=c[a];//运算符号存入resultChar
if (grade==1) {
for (int i1=0;i1<=n;i1++) {
left=rand.nextInt(100);
right=rand.nextInt(100);//左右百内随机数
String b= left+resultChar+right+"=";//题目
//又一套,存题目
if(resultChar=="+"){
re3=left+right;
String d=left+resultChar+right+"="+re3;
}else if(resultChar=="-"){
re3=left-right;
String e=left+resultChar+right+"="+re3;
}
}
}
if (grade==2) {
for (int i2=0;i2<=n;i2++) {
if(resultChar=="+"){
left=rand.nextInt(10000);
right=rand.nextInt(10000);
String b= left+resultChar+right+"=";
if((left%100==0 || left%1000==0 || left<=100)&&(right%100==0 || right%1000==0 || right<=100)) {
re3=left+right;
String e=left+resultChar+right+"="+re3;
}
if(left%100==0 && left>=100 && (right%100==0 || right%10==0)) {
re3=left+right;
String f=left+resultChar+right+"="+re3;
}
}else if(resultChar=="-"){
left=rand.nextInt(10000);
right=rand.nextInt(10000);
String b= left+resultChar+right+"=";
if((left%100==0 || left%1000==0 || left<=100)&&(right%100==0 || right%1000==0 || right<=100)) {
re3=left-right;
String g=left+resultChar+right+"="+re3;
}
if(left%100==0 && left>=100 && (right%100==0 || right%10==0)) {
re3=left-right;
String h=left+resultChar+right+"="+re3;
}
}else if(resultChar=="×"){
left=rand.nextInt(10)+1;
right=rand.nextInt(10)+1;
String b= left+resultChar+right+"=";
re3=left-right;
String j=left+resultChar+right+"="+re3;
}else if(resultChar=="÷"){
left=rand.nextInt(10)+1;
right=rand.nextInt(10)+1;
String b= left+resultChar+right+"=";
re2=left/right;
re1=left%right;
String k=left+resultChar+right+"=";
if(re1==0) {
re3=left/right;
String l=left+resultChar+right+"="+re3;
}
else {
String m=left+resultChar+right+"="+(re1+"..."+re2);
}
}
}
}
if (grade==3) {
for (int i3=0;i3<=n;i3++) {
if(resultChar=="+"){
left=rand.nextInt(10000);
right=rand.nextInt(10000);
re3=left+right;
String o= left+resultChar+right+"="+re3;
}
if(resultChar=="-") {
left=rand.nextInt(10000);
right=rand.nextInt(10000);
re3=left-right;
String o= left+resultChar+right+"="+re3;
}
if(resultChar=="×") {
left=rand.nextInt(1000)+100;
right=rand.nextInt(100)+10;
re3=left*right;
String o= left+resultChar+right+"="+re3;
}
if(resultChar=="÷") {
left=rand.nextInt(1000)+100;
right=rand.nextInt(100)+10;
re3=left/right;
String o= left+resultChar+right+"="+re3;
re2=left/right;
re1=left%right;
if(re1==0) {
String p=left+resultChar+right+"="+re3;
}
else {
String p=left+resultChar+right+"="+(re1+"..."+re2);
}
因为
3. 代码规范
请给出本次实验使用的代码规范:
- 类名首字母应该大写。每个单词的首字母大写。
- 避免异常
- 人工检查代码是否存在错误
- 包名必须小写
- 避免类似的名字,或者仅仅是大小写不同的名字
- 如果变量名是集合,变量名应用负数 如int [] students
- 如果是大括号内为空,则简洁地写成{}即可,不需要换行;
- 任何运算符左右必须加一个空格。 运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运行符等。
- 单行字符数限不超过 120 个
五、测试
测试例 | 结果 |
---|---|
6 2 | 题目答案已生成请查看out.txt 正确 |
10000 3 | 参数过大 |
5 3 | 题目答案已生成请查看out.txt 正确 |
六、总结
- 因为时间的不充裕,每门科目都有作业加上自己的时间规划不完美,以及和搭档的首次配合效果不理想,我们分工不明确
- 导致了改代码花费了太多时间,却是以最简单的方法写了很冗长的代码,错误太多,我们会改进,
- 我们对栈和调度场算法与逆波兰表达式的知识不是很熟悉,导致只能用以前的基础知识写代码,费时费力,说到底都是我们知识匮乏造成的
- 这次不知道加上括号使用,四则混合运算出现了很多错误,我们会努力改进代码。