结队作业1.1

211606363 赖震静 211606339 严斌 

一、预估与实际

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

2小时  

24小时

• Estimate

• 估计这个任务需要多少时间

3天

最后一刻才勉强完成

Development

开发

2天

4天

• Analysis

• 需求分析 (包括学习新技术)

1h  

1天 

• Design Spec

• 生成设计文档

1小时

1小时

• Design Review

• 设计复审

1小时

1小时

• Coding Standard

• 代码规范 (为目前的开发制定合适的规范)

 2小时   

2小时

• Design

• 具体设计

 1小时

1天

• Coding

• 具体编码

 4小时

3天

• Code Review

• 代码复审

 1小时  

1小时 

• Test

• 测试(自我测试,修改代码,提交修改)

 

 

Reporting

报告

 1小时

1小时 

• Test Repor

• 测试报告

 

 

• Size Measurement

• 计算工作量

 

 

• Postmortem & Process Improvement Plan

• 事后总结, 并提出过程改进计划

 

 

 

 

合计

一周

二、需求分析

通过在百度的查阅中首先了解到三四年级的小学生数学计算有几个特点:

第一:计算符号随即,但是最后的出的结果不允许世小数或者负数。

第二:其次数据大小不能超过100且得出的结论不能大过1000。

三、设计

1. 设计思路

说明你如何设计这个程序

首先先生成随机数随机字符

其次生成算法

最后输出结论

其次还是要注意的就是括号的生成。

2. 实现方案

穷举法

四、编码

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

1. 调试日志

调试时一直无法把握括号的位子关系,总会有一些表达式的括号会易位,后来发现是由于循环上的问题导致的最后找到问题并解决。

2. 关键代码

请展示一段程序的关键代码,并解释代码的作用 
public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
      sc.close();

}

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

    for(int i=0;i<input.length();i++){
        if(input.charAt(i) == '('){           
            opStack.push('(');
        }else if(isOperator(input.charAt(i))){  
            char curOp = input.charAt(i);
            if(opStack.isEmpty())          
                opStack.push(curOp);
            else if(opMap.get(curOp) > opMap.get(opStack.peek())) 
                opStack.push(curOp);
            else{                          
                for(int j = 0;j<=opStack.size();j++){
                    char ch = opStack.pop();  
                    sb.append(ch + " ");
                    if(opStack.isEmpty()){      
                        opStack.push(curOp);
                        break;
                    }else if(opMap.get(curOp) > opMap.get(opStack.peek())){
                        opStack.push(curOp);
                        break;
                    }
                }
            }
        }else if(input.charAt(i) == ')'){     
            for(int j = 0;j<opStack.size();j++){
                char c = opStack.pop();
                if(c == '(')
                    break;
                else
                    sb.append(c + " ");
            }
        }else{                       
            sb.append(input.charAt(i)+" ");
        }
    }
    for(int i = 0;i<=opStack.size();i++){
        sb.append(opStack.pop() + " ");
    }

    System.out.println(sb);
}

逆波兰算法,计算算式的值

 

五、测试

输入需要产生的四则运算的个数:10 
18*36+2

18*36+2=650

320+67-18

320+67-18=369

72+84*12

72+84*12=1080

98-25-6

98-25-6=67

26*6+2

26*6+2=158

89-32+58

89-32+58=115

55+32*12

55+32*12=439

67*9-99

67*9-99=504

79+3-25

79+3-25=57

48+52-7

48+52-7=93

六、总结

首先这次作业对于现在的我们来说还是有点挑战的,里面有许多的代码并非是独立完成,也有求助同学以及网络上的一些渠道,虽然不是自己独立完成的但是我学习到了知识,至少看懂了这些代码,我相信以后的作业肯定可以独立完成。然后就是一些代码的总结,首先就在仓库这一难关难道我了,一波三折终于解决,然后还有就是在符号上尤其是括号的里也是经历了许多波折。总的来说这次作业还是对我们的收获还是很大的。

 

 
 
posted @ 2018-09-19 11:44  个人信息  阅读(133)  评论(0编辑  收藏  举报