• 结对作业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. 代码规范

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

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

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

    五、测试

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

    六、总结

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

    • 这次作业,花了一部分时间把上一次作业的一二年级的代码优化完善了,然后三年级的代码还有待改进,很多复杂的情况没考虑到,代码也觉得有点繁琐复杂,觉得可以再优化
    • 写代码前要先构思一遍,可以现在文档中先写伪代码,先写出整体框架,再去细化,一定一定要先构思,不要边写边想
    • 要考虑到各种情况,针对各种情况改写代码
    • 要跟结对的成员多沟通,每个人的想法不一样,可以讨论看看谁的想法更好,或者一起讨论有没有更好的实现方式
    • 平时要多去看视频巩固一下基础知识,这两次作业大部分时间还是花在学习、巩固新旧知识上,反而打代码的时间变少了,希望以后情况能互换
  • 相关阅读:
    查询集 QuerySet
    JWT的认识和session的区别
    Django REST framework 简介
    Django自动获取项目中的全部URL
    flask数据库迁移
    类中方法的两种调用方式
    flask项目配置
    NOIP 模拟 $19; m u$
    NOIP 模拟 $18; m 老司机的狂欢$
    NOIP 模拟 $18; m 炼金术士的疑惑$
  • 原文地址:https://www.cnblogs.com/Lin-zy/p/9650302.html
Copyright © 2020-2023  润新知