结对作业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 正确

六、总结

  • 因为时间的不充裕,每门科目都有作业加上自己的时间规划不完美,以及和搭档的首次配合效果不理想,我们分工不明确
  • 导致了改代码花费了太多时间,却是以最简单的方法写了很冗长的代码,错误太多,我们会改进,
  • 我们对栈和调度场算法与逆波兰表达式的知识不是很熟悉,导致只能用以前的基础知识写代码,费时费力,说到底都是我们知识匮乏造成的
  • 这次不知道加上括号使用,四则混合运算出现了很多错误,我们会努力改进代码。

posted @ 2018-09-19 00:19  cielpupu  阅读(255)  评论(2编辑  收藏  举报