结对作业1

结对作业1

学号1:211606317 林泽宇
学号2:211606388 尹海川

  • 这次把上一次的一、二年级作业优化完善了下,三年级的暂时还出不来完整的符合要求的...有时候输出还有问题...

一、预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
• Estimate • 估计这个任务需要多少时间 7000 8640
Development 开发
• Analysis • 需求分析 (包括学习新技术) 700 720
• Design Spec • 生成设计文档 300 400
• Design Review • 设计复审 60 60
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 120 120
• Design • 具体设计 360 520
• Coding • 具体编码 300 340
• Code Review • 代码复审 160 180
• Test • 测试(自我测试,修改代码,提交修改) 120 120
Reporting 报告
• Test Repor • 测试报告 240 240
• Size Measurement • 计算工作量 120 120
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 60 60
合计 2880

二、需求分析

我通过上网查阅百度的方式了解到,小学三年级四则混合运算有如下的几个特点:(包括作业细化要求)

  • 运算符在2~4个(进一步细化要求:至少两个不同的运算符)
  • 可以加括号进行优先级运算
  • 减法运算的结果不能为负数
  • 除法运算除数不为零,不能有余数,必须要能整除
  • 先乘除后加减,有括号的括号内的先运算

经过分析,我认为,这个程序应当:

  • 使用的数字0~100,不包括得数
  • 需要能进行混合运算,并且至少存在两个不同的运算符,也就是最少需要三个数参与运算
  • 需要随机在加法或减法运算处加括号
  • 计算结果遵循先乘除后加减,有括号的括号内先算

三、设计

1. 设计思路

  • 设计三年级的函数gradeThree
  • 在判断年级的函数judgeGrade内添加运行gradeThree的情况

2. 实现方案

  • 先添加一个三年级的函数gradeThree
  • 在判断年级的函数judgeGrade内加入当n = 3时,运行gradeThree
  • 把"+","-","×","÷"存入字符串数组:sigh
  • 生成三个0~100随机数
  • 利用random函数+sigh数组随机获取两个运算符
  • 生成题号和题目
  • 按顺序判断第一个运算符号和第二个运算符号 遵循先乘除后加减原则,将预算结果存入answer变量中
  • 输出题目 题目+答案
  • 更改输入方式为 -n 100 -grade 3
  • !!!括号的方法暂时只有一点点想法,运用到代码里好像实现不了,所以还没写进去...!!!

四、编码

请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程

1. 调试日志

  • 输出到文本的时候遇到了问题,使用System.setOut(ps); 可以输出到out.txt文本中,但是不能输出的到命令窗口中;使用System.out.println(ps); 则相反

  • 目前正在看学习视频和查阅资料,暂时还没找到比较好的解决方法

  • 用一个中间变量temp交换n和grade的值后,输入 -n -grade 可以正常运行,输入 -grade -n 则无法正常运行,解决办法:查阅资料后,发现要用args[x].equals(“xxx”)才能判断是否符合情况,结论是:基础知识还是不扎实啊啊啊!

  • 当 grade = 3 时,程序无法正常运行,解决办法也还没找到...

  • 随机添加括号的方法和优先级的想法,运用到代码里好像实现不了,现在还是找办法解决,看视频,查资料!!!

  • 逆波兰式 还是不怎么明白...

2. 关键代码

public static void gradeThree(int n) {
	// TODO Auto-generated method stub
	str = new String[n];
	String s[] = {"+","-","×","÷"}; 
	//生成题目
	for (int i = 1; i <= n; i++) {
		//生成四个0~100的随机数
		int num1 = (int)(Math.random()*100+1);
		int num2 = (int)(Math.random()*100+1);
		int num3 = (int)(Math.random()*100+1);

// int num4 = (int)(Math.random()*100+1);

		//生成随机运算符号
		String sigh[] = null;
		for (int j = 0; j < 2; j++) {
			int sighNum = (int)(Math.random()*4);
			sigh[j] = s[sighNum];
		}
		//生成题序和题目
		System.out.println("("+ i +") " + num1 + sigh[0] + num2 + sigh[1] + num3 );
		
		int answer = 0;
		//第一个运算符号**************************************************************
		//先乘除
		if(sigh[0] == s[2] || sigh[0] == s[3]) {
			if(sigh[0] == s[2]) {//乘
				answer = num1*num2;
			}
			else {//除
				answer = num1/num2;
			}
		}
		//后加减
		if(sigh[0] == s[0] || sigh[0] == s[1]) {
			if(sigh[0] == s[2]) {//加
				answer = num1+num2;
			}
			else {//减
				answer = num1-num2; 
			}
		}
		//第二个运算符号**************************************************************
		//先乘除
		if(sigh[1] == s[2] || sigh[1] == s[3]) {
			if(sigh[1] == s[2]) {//乘
				answer = answer*num3;
			}
			else {//除
				answer = answer/num3;
			}
		}
		//后加减
		if(sigh[1] == s[0] || sigh[1] == s[1]) {
			if(sigh[1] == s[2]) {//加
				answer = answer+num3;
			}
			else {//减
				answer = answer-num3;
			}
		}
		str[i-1] = ("("+ i +") " + num1 + sigh[0] + num2 + sigh[1] + num3 + "=" + answer);
		//*************************************************************************
	}
	System.out.println();
	//输出答案
	for(String a:str)
		System.out.println(a);
	//输出日期和学号姓名
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
	System.out.println();
	System.out.println("211606317 林泽宇  &  211606388 尹海川  " +sdf.format(new Date()));
}//gradeThree

3. 代码规范

请给出本次实验使用的代码规范:

  • 能简化则简化
  • 注释要简单明了,增加代码可读性
  • 做好缩进和利用空行分隔

并人工检查代码是否符合规范

五、测试

  • 测试两种输入方式
  • 测试三个年段都能运行
  • 测试多次,看会不会出现特殊情况
  • ...

六、总结

请总结过程中的教训和经验,思考

  • 这次作业,花了一部分时间把上一次作业的一二年级的代码优化完善了,然后三年级的代码还有待改进,很多复杂的情况没考虑到,代码也觉得有点繁琐复杂,觉得可以再优化
  • 写代码前要先构思一遍,可以现在文档中先写伪代码,先写出整体框架,再去细化,一定一定要先构思,不要边写边想
  • 要考虑到各种情况,针对各种情况改写代码
  • 要跟结对的成员多沟通,每个人的想法不一样,可以讨论看看谁的想法更好,或者一起讨论有没有更好的实现方式
  • 平时要多去看视频巩固一下基础知识,这两次作业大部分时间还是花在学习、巩固新旧知识上,反而打代码的时间变少了,希望以后情况能互换
原文地址:https://www.cnblogs.com/Lin-zy/p/9650302.html