首页 > 其他 > 详细

结对作业

时间:2018-09-25 23:24:47      阅读:181      评论:0      收藏:0      [点我收藏+]

211606345 翟堂贵211606330 王建木

一、预估与实际

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

二、需求分析
我通过网上查询了解到,小学三年级数学的四则运算特点如下:
运算符在2~4个,可以加括号,一对括号算一个运算符,"="不算运算符
减法运算的结果不能为负数
除法运算不能有余数,除数不能为零
算式内最多只能有一对括号,并且括号不能无意义
能在命令行模式下正常运行
算式结果小于10000
需要保留之前1-2年级出题器的功能
输入格式为-n 题目数 (1-100) -grade 年级(1-3)或-grade 年级(1-3)-n 题目数(1-100)
生成题目后需要将题目和答案保存到out.txt文件中并打印输出

三、设计
1.设计思路

设计getThirdGradeMathSubject方法,根据随机生成的运算符的个数(2-4)分别调用handleTwo、handleThree、handleFour方法处理
判断是否需要添加括号,若为true,则调用getBrackets方法返回添加完括号的运算符串;
根据是否添加括号分别调用priotitySort和prioritySortWithoutBrackets方法分别对传入的运算符串进行优先级排序,分别返回排序完成后带括号和不带括号的运算符串
遍历第三步生成的运算符串,循环调用handleSign方法,根据当前遍历到的运算符(+,-,×,÷)进行不同的处理。handleSign方法接收如("+",100)的参数,生成第二个操作数和运算后的结果,并将操作数和结果用整形数组保存并返回。当传入的运算符为"÷"时调用getFactor方法保证操作数2为传入的操作数1的因数,保证除法运算的结果为整数。
遍历结束后将得到的操作数数组和排序完成的运算符数组重新排列,生成算式和答案并返回即可。
2.计算关键点
计算关键点:如何将运算符串进行优先级排序。------>定义三个空栈,遍历运算符串,当栈为空时将运算符压入栈1栈顶。当栈1不为空时,将当前运算符与栈顶元素的优先级进行比较,若当前运算符的优先级高于栈顶元素,则将当前运算符压入栈1栈顶。反之,则循环遍历栈1,将优先级等于或高于当前运算符的元素压入栈2,循环结束后将当前运算符压入栈1栈顶,并将栈2元素压回栈1。当出现括号时,若为左括号,则直接压入栈1栈顶,若为右括号,则将左括号之前的元素压入栈3栈顶。---->栈3存储括号内的运算符。当运算符串遍历结束后,先将栈2内剩余的元素压回栈1,再将栈3内元素压回栈1即可。此时,栈1内元素的优先级为栈顶---->栈底逐渐递减。--->见关键代码。
技术关键点:如何在运算符串中加入括号。---->见关键代码。

四、编码
1.调试日志
2.关键代码
给运算符串添加括号

    public static String getBrackets(String isNeedBrackets){
        String returnString="";
        List<String> list=new ArrayList<String>();
        for(int i=0;i<isNeedBrackets.length();i++){
            list.add(isNeedBrackets.substring(i,i+1));
        }
        Random r=new Random();    
        // k表示插入左括号的位置,p表示插入右括号的位置
        int k=0,p=0;
        k=r.nextInt(isNeedBrackets.length());
        list.add(k,"(");
        List<Integer> rightSignLocation=new ArrayList<Integer>();
        int rightLoction=0;
        if(k==0){
            for(int i=2;i<list.size();i++){
                rightSignLocation.add(i);
            }
            rightLoction=r.nextInt(rightSignLocation.size());
            p=rightSignLocation.get(rightLoction);
        }else{        
            for(int i=k+2;i<=list.size();i++){
                rightSignLocation.add(i);
            }
            rightLoction=r.nextInt(rightSignLocation.size());
            p=rightSignLocation.get(rightLoction);
        }
        list.add(p,")");
        for(String s:list){
            returnString=returnString+s;
        }
        return returnString;
    }

3.代码规范
类名使用UpperCamelCase风格
方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格
不允许任何魔法值(即未经预先定义的常量)直接出现在代码中
左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格
if/for/while/switch/do等保留字与括号之间都必须加空格
大括号的使用约定。如果是大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则:
左大括号前不换行
左大括号后换行
右大括号前换行
右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行
任何二目、三木运算符的左右两边都需要加一个空格
方法参数在定义和传入是,多个参数逗号后边必须加空格

五、测试
测试编号
具体输入
预期结果
实际结果
1
-n 10 -grade 0
请输入正确的年级(1-3)
符合预期
2
-n 10 -grade 3
正常执行,生成10道三年级四则运算题
符合预期
3
-n 1000 -grade 3
请输入正确的题目数(1-100)
符合预期
4
-grade 3 -n 10
正常执行,生成10道三年级乘除运算题
符合预期
5
-grade 4 -n 10
请输入正确的年级(1-3)
符合预期

六、总结
感觉自己的欠缺很多。需要多练练

比上一次的作业复杂很多,不过在和小伙伴的努力下克服了

细节需要多注意 考虑问题要更全面

结对作业

原文:https://www.cnblogs.com/zhaitanggui345/p/9704162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!