结对编程ending-我和洧洧的碎碎念
应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历。
我的碎碎念时间……
对比个人项目和结对编程项目二者需求,前者重在面对不同对象生成题目到文本,而后者涉及的方面就更多。除了可以复用个人项目生成题目这一模块之外,项目还有很多难点需要攻破,并且在完成项目过程中也遇到了各种各样的问题:
1、用户注册模块实现短信验证码功能;
- 阿里云注册申请短信签名;
- 将demo嵌入生成短信验证码这一button的监听事件;
单独运行demo需要自己写一个主函数,测试手机的确可以收到验证码之后,将这一模块放进项目中单独为一个类,不再需要主函数,在注册界面加入按钮监听功能。在此调用验证码类的功能。
实现中遇到的问题就是与队友界面的代码进行综合的时候,粗心将输入验证码的文本变量verification当成了按钮,调用功能不能实现,改了很久很久……最后队友发现这个问题才得到解决。一方面也是两个人编程各自实现功能时候还好,综合的时候确实暴露了很多问题,各自编码风格,命名习惯等等,交流磨合是必不可少的过程,自己也确实从队友这里收获许多;另一方面就是个人完成模块一定要耐心细心,申请签名的确浪费时间磨人耐心,写代码的时候细心一些才不会因为小错误浪费时间。
registered.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent em)
{
try {
StudyUI smsUtils = new StudyUI();
String telphoneString = ad.getText();
smsUtils.sendSms(telphoneString);
}
catch (ClientException e) {
e.printStackTrace();
}
}
});
2、UI界面的文本数据监听并利用;
在项目中有一个这样的需求,就是用户还是要在界面输入生成的题目数量,之后会生成相应数量的题目。
个人项目可以直接用循环解决,但在这次项目中,这个问题就比较难办,因为输入数量的文本在一个界面,得到这个数据之后直接控制之后需要产生多少个题目界面(前提一道题目一个界面),项目中两个功能分成了两个界面,不能同时利用这一变量,后来也是朋友讲解才明白要利用静态变量。单独写一个类来声明这些‘“共享”的变量,之后在需要的类中import这个类即可。
public class GetNum
{
static int k; //题目数量
static int count; //生成界面数量
static int score; //显示得分
}
之后就是在输入题目数量的界面将自定义的值赋给K,一开始自己是直接将赋值语句 String numb=num.getText(); GetNum.k=Integer.valueOf(numb); 写进了文本num的监听模块,在之后测试产生的界面数量时为0,显然是这个值没有赋过去,后来反复的调试输出测试,发现是自己选择监听模块出了错,这里就有一个逻辑问题,num是用来监听输入的数量,输入之后这个监听功能就实现并且完成,不能在这里直接getText,在接下来的按钮模块或者其他模块直接getText才可以。这的确是一个很大的教训,在这块花费的时间很长,并且像这种错误还不容易发现。
primary.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
String numb=num.getText();
GetNum.k=Integer.valueOf(numb);
dispose();
run(new MyQuiz(),500,350);
} });
num.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
int c=e.getButton();
if(c==MouseEvent.BUTTON1 && num.getText().equals("题目数量")&&e.getClickCount()==1)
{
num.setText(null);
}
} });
这一模块就是用户在做题的时候按NEXT会到下一界面的题目,控制判断语句中的k就是“共享变量”K,在修改了上面所说的错误之后这里实现起来就简单一些,得到了用户输入的值,这里控制如果界面数量没有超过K值会继续产生题目,反之出现最终的分数界面。
Next.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//System.out.println(GetNum.count);
//System.out.println(GetNum.k);
if(GetNum.count<GetNum.k-1)
{
dispose();
run(new MyQuiz(),500,350);
GetNum.count++;
}
else {
dispose();
run(new MyScore(),500,350);
}
}
});
这大概是项目中花费时间最长爬出来的两个坑,在这次项目中也是真的感受到队友的细致与认真,有时候已经到自己觉得:啊啊啊好麻烦,不然就这样吧。结果还是队友找到了解决的更好的办法,所以这次经历不仅是提升编程能力过程,也能感受到他人身上值得学习的东西。期间的交流和改bug的过程也是一份珍贵的经历。
哈哈哈,然后就是洧洧的碎碎念时间……
结对编程在个人编程的基础上加上了UI界面,而且我认为结对编程与个人编程相同的需求大概就是在小学、中学、和高中出题的要求上是一致的了,其余的需求都是全新的需求,于是我们在保留小学、中学和高中出题的代码上,增添了UI界面和计算结果这两个需求,并将其整合起来就成了我们结对编程项目的大概框架。
一开始由于个人编程的误导,因为个人编程里面是存储好指定几个人的信息,然后在此情况下,生成指定的个人难度的试卷,于是我们俩认为一开始会有个登录界面,并存储进相应的个人信息,比如啥名字,账号,密码之类的,再加上在群里面有人在问数据库怎么用,就更加加深了我们往这方面的想法,于是就感觉这次的个人编程好难呀,连数据库都用上了,但由于没有学过,我们先将这个放到了一边,做起了UI界面,想着最后再来考虑这个问题。再将第一步也就是登录界面完成后,我们俩看了看结对编程的需求,然后这才发现它的需求里面其实根本就没有什么登录的界面要求,不需要存储用户的数据在里面,这里步骤应该是短信发送验证码成功后,到设置密码,设置密码完成后就直接到了选择出题难度的界面了,然后就可以开始出题了,于是在这里我们得到了一个教训,看清楚需求到底是什么样的,不要自己想当然的增加需求,更不要因为别人的想法来左右自己的想法,这是我在这次结对编程里得到的第一个教训。
两个人编程肯定是分工合作,因此我俩一个人负责短信API那个一个人负责写每一部分的UI界面,然后将UI界面发送给她进行两部分的整合,然后由于有两个地方的注释有点模糊不清的原因,她理解错了,就造成了整合在一起之后的代码不能正常地发送短信,后来一看才发现加代码的地方加错了,于是这里又得到了一个教训,那就是注释写清楚,遇上模糊不清的时候还是要和小组成员进行讨论,不能自己去猜测到底是什么那内容。
这次结对编程中我收获到了许多经验和教训,1+1>2我也是深刻的体会到了,但这是在两人配合默契相辅相成的情况下的,也学到了许多原来不曾接触的东西,比如写一个UI界面,以及计算算是所需用到的后缀表达式,这都是我在这次结对编程学到的东西,而且感觉比以往学到的更深刻也更牢固。
结对编程ending-我和洧洧的碎碎念的更多相关文章
- 结对编程--基于android平台的黄金点游戏
游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...
- 结对编程-地铁续(有种上个学期OO的既视感)
我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
- 结对编程—黄金点游戏WinForm单机版
本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...
- Week4 结对编程
1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...
- 结对编程——关于Fault、Error、Failure程序设计
一.问题描述: 构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error •触发Error,但是不能产生Fai ...
- GUI、模块化与结对编程(homework-03)
摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...
- BJDP结对编程活动
7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1. 金锐分享单元测试的Mocking技术,20 mins 2. 伍 ...
随机推荐
- Bigger-Mai 养成计划,Docker之安装,部署
CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发 ...
- J2EE笔记
J2EE的优势 J2EE允许公司把一些通用的.很繁琐的服务端任务交给中间件供应商去完成.这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间.高级中间件供应商提供以下这些复杂的中间件服务 ...
- 微信支付之App支付
项目接入微信支付的准备工作: 注册成为开发者,进行资质认证,这里是需要300元的审核费用的: 在微信商户平台创建应用,提交等待审核(大致需要5-7个工作日): 应用审核通过之后,进入应用,开通微信支付 ...
- MySQL查询缓存总结
可以通过下面的SQL查看当前查询缓存相关参数状态: show variables like '%query_cache%'; 1) query_cache_type 查询缓存类型: 0 表示始终不适 ...
- IPTABLES使用总结(内网模拟银行网络)
iptables中有以下三种类型的表: FILTER表,默认的表,包含以下三种内建链: INPUT链,发给本地sockets的包 FORWARD链,经由系统发送的包 OUTPUT链,本地生成并发出的包 ...
- python转义符
- npm ERR! File exists: /XXX/xxx npm ERR! Move it away, and try again.
今天抽空将我的静态服务 ks-server 之前留下的 bug(在node低版本情况下报错)维护了一下. 当我重新 npm link 时,如下错误: npm WARN ks-server@1.0.2 ...
- 规则引擎 drools
https://www.jianshu.com/p/725811f420db 深入了解Drools 简单介绍 笔者正在做风控系统,风控系统里边存在非常多的规则(比如:age < 16 || ag ...
- 关于spark写入文件至文件系统并制定文件名之自定义outputFormat
引言: spark项目中通常我们需要将我们处理之后数据保存到文件中,比如将处理之后的RDD保存到hdfs上指定的目录中,亦或是保存在本地 spark保存文件: 1.rdd.saveAsTextFile ...
- CPU利用率和CPU负荷(CPU usage vs CPU load)
对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷. 其中%Cpu相关的内容: us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗 ...