结对作业

本次结对:211606457 郑沐榕、211406242 杨长元

一、预估与实际

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

二、需求分析

通过百度的方式了解到,小学三到四年级的四则运算有如下的几个特点:

  • 混合运算中要包含+、-、×、÷运算
  • 不涉及分数/小数运算
  • 随机数范围要求是[0,10000)

作业要求:

  • 运算符在2~4个(且至少出现两个不同的运算符)
  • 可以加括号
  • 减法运算的结果不能有负数
  • 除法运算除数不能为0,不能有余数

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

  • 判断用户输入的参数是否符合设定的要求
  • 实现加减乘除混合运算
  • 将题目和答案输出到指定文件
  • 一道题目要保证至少包含两个不同的运算符
  • 所有题目要保证不重复

三、设计

1. 设计思路

  • 大概包含四个类:①接收用户输入参数并根据参数调用相应的函数、②生成题目、③计算并返回结果、④存储题目和答案
  • 算法的关键:调度场算法与逆波兰表达式
  • ...

2. 实现方案

-- 分析需求
-- 把几个方法敲出来在进行主方法调用、完善各方法块的的代码(本来整理完需求是想先写注释再敲代码的,结果发现自己还是不太会用这种方法,所以还是边打边想2333)

四、编码

1. 调试日志

没有...我觉得我没有写出出题和解题的功能就是最大的bug,其他都没啥bug。

2. 关键代码

(这是2333上一个任务的需求,但是改过了,新的需求没整出来,没新内容好展示2333)
public static void calculate1(Integer n) {
Random random = new Random();
Map<Integer,String> question = new HashMap<Integer,String>();
Map<Integer,Integer> answer = new HashMap<Integer,Integer>();
for( int i = 1; i <= n; i++) {
int result = 0;
int parm1 = (int)(Math.random() * MAX_NUM); //final static int MAX_NUM = 100;
int parm2 = (int)(Math.random() * MAX_NUM);
int operater1 = random.nextInt()%2;
switch(operater1) {
case 0:
result = parm1 + parm2;
break;
case 1:
if( parm1 < parm2) {
int t = parm2;
parm2 = parm1;
parm1 = t;
result = parm1 - parm2;
}else {
result = parm1 - parm2;
}break;
}
question.put(i, "" + parm1 + operater1 + parm2);
answer.put(i, result);
}

3. 代码规范

  • 1.为了达到代码自己自解释的目标,任何自定义编程元素在命名时,使用精良完整的单词组合来表达其意。但是有些名称实在过于长,这个可以适当的缩写,不要忘文不知义就可以。这个不是客观的规定。
    正例:从远程仓库拉取代码的类命名为 PullCodeFromRemoteRepository。
    反例:变量 int a; 的随意命名方式。

  • 2.注释的双斜线与注释内容之间有且仅有一个空格。

  • 3.方法参数在定义和传入时,多个参数逗号后边必须加空格。
    正例:method("a", "b", "c");--例子中实参的”a”,后边必须要有一个空格。

  • 4.在 if/else/for/while/do 语句中必须使用大括号,即使只有一行代码,为了避免采用单行的编码方式:if (condition) statements;

  • 5.避免采用取反逻辑运算符:
    说明:取反逻辑不利于快速理解,并且取反逻辑写法必然存在对应的正向逻辑写法。
    正例:使用 if (x < 628) 来表达 x 小于 628。
    反例:使用 if (!(x >= 628)) 来表达 x 小于 628。

  • 6.[参考]对于注释的要求:
    第一、能够准确反应设计思想和代码逻辑;
    第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。

  • 7.在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
    说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则);

五、测试

测试点 测试用例 测试结果 是否解决(是如何解决)

(我。。。。。。)

六、总结

emmmm...怎么说呢...先说说结对编程这事吧,因为事先约定,两个人都不知道个人作业和结对作业是穿插进行的,由于队友近期都在带军训(结对作业开始以来两人还没见上面所以photo也没有啦,本来就没在一块打代码2333),所以这次结对互动仅限于网络上少许的交流。然后单纯是疑问有交集,如何解决和代码都没有交集2333最后是先提交了他的代码。另外,我的命令行编译、运行不了.java文件,上一次就不行,百度搜了解决方法都得不到解决,问同学同学说不知道怎么处理,然后就很难受命令行运行不了,就需要改获取输入的方式,判断为空要换方法,正则也不适用,最后测试结果也没做出来= =。然后代码思路方面,开始觉得括号位置随机、数字随机、运算符随机,还要在考虑随机题目产生出来后减数运算不出现负数、以及除法运算不出现小数,把所有问题同时放在一起考虑,就会觉得太复杂了情况太多种了。后来看群上班里同学在交流想法以及今天课上李佳讲他解决问题的一整个思路,会觉得自己想得太局限,没有放开了去想、分析怎么解决(开始也有想到以前数构有讲过二叉树储存运算式,就去翻以前课件,然后发现逆波兰原来和后序表达式有关,查了后缀中缀看了逆波兰,看懂了解题依旧觉得出题难,确实是没有去分解步骤,没有动笔。然后就没有进一步去思考了扶额23333)群上之前在议论提交时间的时候,有同学说到作业太多没时间,可能是因为有重修课程吧,但是如果只剩专业课那其他作业真的并不多,就软工这玩意一直挂着(扶额),花费的时间也最多(而且很多时候就是花了大把时间完了问题还是没解决OWO)。当然,自己没有尽全力想去写出来,有保留。身在曹营心在汉,知道自己以后就业不走敲代码(软件工程就业领域)这些方向,老师说你们就当成做游戏去完成,不要有太大的负担,但是并没有给我是玩游戏(通关)之类的感觉,项目简单也没感觉好玩,项目难度高也没觉得好玩,没有成败感,仅仅只是当成作业去完成;专业课保证基本不落下(软工就...),只是担心毕设,只是担心能否顺利毕业;也没有担心我专业技能学得太差,以后无法以此作为谋生技能;开学以来也一直在反复思考自己选的那条路,近些天终于确定下来了(欢呼OUO),可以开始安排时间为此做准备了。最后觉得很对不住队友(QAQ),没有给他什么帮助,甚至有点拖后腿的性质。以上是本次结对任务期间大致总结。

unknown2的更多相关文章

  1. ntdll.dll函数原型

    /*NTDLL Base Functions*/NTSYSAPI NTSTATUS NTAPI NtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOI ...

  2. 类结构体 与 byte[] 转换类

    public static class StructConvert { public static object BytesToStruct(byte[] bytes, Type strcutType ...

  3. Nt内核函数原型and中文

    NtLoadDriver 服务控制管理器加载设备驱动. NtUnloadDriver 服务控制管理器支持卸载指定的驱动程序. NtRegisterNewDevice 加载新驱动文件. NtQueryI ...

  4. iOS 调用私有函数安装app 卸载 app

    1.环境 1.OS X EI Caption 10.11.1 & Xcode 7 2.Xcode安装Command Line Tools 3.iPhone 安装AppSync 2.Mobile ...

  5. 阅读 LdrInitializeThunk

    参考: http://blog.csdn.net/hw_henry2008/article/details/6568255 Windows 的 DLL 装入(除 ntdll.dll 外)和连接是通过 ...

  6. 经典的HTML5游戏及其源码分析

    HTML5已经相当强大,在HTML5平台上,我们可以完成很多非常复杂的动画效果,包括游戏在内.早期我们只能利用flash来实现网络游戏,现在我们又多了一种选择,即用HTML5制作游戏.相比flash, ...

  7. golang 学习笔记 ---数组/字符串/切片

    数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.数组的长度是数组类型的组成部分.因为数组的长度是数组类型的一个部分,不同长度或不同类型的数据组成的数组都是不同的类 ...

  8. Nt函数原型头文件

    //转自看雪,可以作为一个头文件使用,方便快捷 1 NTSTATUS NTAPI NtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOID PortI ...

  9. 使用Spring提供Quartz来实现定时任务

    Spring功能越来越多了,用起来还很舒服方便,Quartz实现的定时任务就是一个. 首先是配置文件: <?xml version="1.0" encoding=" ...

随机推荐

  1. Immutable.js 以及在 react+redux 项目中的实践

    来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...

  2. STM32(2)——GPIO

    对于初学者而言,最简单的是对芯片上的IO进行操作,我们学习ARM时候,第一个工程就是点亮LED,STM32F103ZET6通用输入输出接口(General-Purpose Inputs/Outputs ...

  3. Leecode刷题之旅-C语言/python-389 找不同

    /* * @lc app=leetcode.cn id=389 lang=c * * [389] 找不同 * * https://leetcode-cn.com/problems/find-the-d ...

  4. 002---rest_framework认证组件

    rest_framework认证组件 问题:有些API,需要用户登录才能访问,有些无需登录就能访问. 解决: a. 创建两个模型类:UserInfo---OneToOne---UsetToken b. ...

  5. 解决Linux上tomcat启动却无法访问

    linux中tomcat的安装 安装tomcat前首先要安装对应的jdk并配置Java环境 下载tomcat安装包 下载路径:https://tomcat.apache.org/download-80 ...

  6. fdisk -l不显示磁盘信息的问题

    新建了个ubuntu虚拟机,进去后使用fdisk查看磁盘信息居然没反应,嗯?这是怎么回事 别急,这是因为fdisk命令在/sbin目录下,使用root权限才可以运行. 由于是新建的虚拟机,按以下方法设 ...

  7. 20155203 实验一《Java开发环境的熟悉》实验报告

    20155203 实验一<Java开发环境的熟悉>实验报告 一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 二.练 ...

  8. 20155301 2016-2017-2 《Java程序设计》第10周学习总结

    20155301 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 计算机网络: 1.在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP ...

  9. jdk和tomcat版本对应

    见tomcat的官网说明:tomcat.apache.org/whichversion.html Apache Tomcat ®是一个开源软件实现了Java Servlet和JavaServer Pa ...

  10. C# JSON和对象之间互相转换

    1.首先是声明用户信息对象,DataContract修饰类,表示可以被解析成JSON,DataMember修饰属性,Order表示 解析的顺序,另外Lover是数组列表,表示女朋友个数 Address ...