结对作业1

211606317林泽宇 211606388尹海川

一、预估与实际

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

二、需求分析

我通过百度的方式了解到,四则运算有如下的几个特点:

  • 加法、减法、乘法和除法统称四则运算。
  • 在没有括号的算式里,如果只有加、减法或者只有乘、除法,都要从左往右按顺序计算。
  • 在没有括号的算式里,既有乘、除法又有加、减法的,要先算乘除法,再算加减法。
  • 算式有括号,要先算括号里面的,再算括号外面的;大、中、小括号的计算顺序为小→中→大。括号里面的计算顺序遵循以上1、2、3条的计算顺序。

三、设计

1. 设计思路

  • 首先生成随机数
  • 生成随机四则算式
  • 计算
  • 输出到txt文件

2. 实现方案

写出具体实现的步骤

  • 准备工作:先在Github上创建仓库,克隆到本地...
  • 正则表达式拆分
  • 逆波兰表达式

四、编码

  • 计算符号,生成随机数
  • 循环遍历生成随机四则算式
  • 将算式传入数组或集合
  • 需要分成两个数组,一个存放符号,一个存放数字
  • 计算结果
  • 将答案打印输出到txt文本

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);

        //生成随机运算符号
        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. 代码规范

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

  • 未定义的常量不可使用在代码中
  • 左大括号前不换行。左大括号后换行。右大括号前换行。右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
  • 在 if/else/for/while/do 语句中必须使用大括号,且保留字与括号之间都必须加空格。

五、测试

  • 测试两种输入方式
  • 测试三个年段

六、总结

  • 看到题目一遍就关掉了页面,然后又打开了...真的很头疼啊哈哈
  • 体会到了两个人结队的好处,不管有什么问题两个人都能一起解决,虽然快提交了还是没解决问题,争取这两天解决掉

猜你喜欢

转载自www.cnblogs.com/Yinhaichuan/p/9671990.html