一、实验报告封面
-
- 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126
- 指导教师:娄嘉鹏 实验日期:2019年5月2日
- 实验时间:--- 实验序号:实验三
- 实验名称:敏捷开发与XP实践
- 实验内容
-
1. XP基础
2. XP核心实践
3. 相关工具
实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
二、实验内容
(一)编码标准
实验步骤:
1.安装插件alibaba
2.在项目名称上单击右键,在弹出菜单上选择编码规约扫描
3.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化
public class CodeStandard { public static void main(String [] args){ StringBuffer buffer = new StringBuffer(); buffer.append('S'); buffer.append("tringBuffer"); System.out.println(buffer.charAt(1)); System.out.println(buffer.capacity()); System.out.println(buffer.indexOf("tring")); System.out.println("buffer = " + buffer.toString()); if(buffer.capacity()<20) buffer.append("1234567"); for(int i=0; i<buffer.length();i++) System.out.println(buffer.charAt(i)); } }
3.2右击文件,找到格式化代码
4.研究Code菜单,找出一项让自己感觉最好用的功能
Code菜单:
-
Override Methods ( 重写覆盖方法 ) Ctrl + O
-
Implements Methods ( 实现接口方法 ) Ctrl + I
-
Gengrate ( 用于生成Construct、Getter/Setter、toString等) Alt + Insert
-
Surround With (使用if-else、for、while等语句包装代码段) Ctrl+Alt+T
-
SmartType ( 智能选择并实现 ) Ctrl + Shift + 空格
-
Cyclic Expand Word ( 循环往上选择单词 ) Alt + /
-
Cyclic Expand Word (Backwrad)( 循环往下选择单词 ) Alt + Shift + /
-
Expand ( 方法展开 ) Ctrl + 加号
-
Collapse ( 方法折叠 ) Ctrl + 减号
-
Expand Recursively ( 同上,方法展开 ) Ctrl + Alt + 加号
-
Collapse Recursively ( 同上,方法折叠 ) Ctrl + Alt + 减号
-
Expand All ( 全部方法展开 ) Ctrl + Shift + 加号
-
Collapse All ( 全部方法折叠 ) Ctrl + Shift + 减号
-
Expand doc comments ( 展开Java doc注释 )
-
Collapse doc comments ( 折叠Java doc注释 )
-
Insert Live Template ( 选择Live Templates模板 ) Ctrl + J
-
Surround with Live Template ( 选择Live Templates模板 ) Ctrl + Alt + J
-
Comment with Line Comment ( 行注释 ) Ctrl + /
-
Reformat Code ( 格式化代码 ) Ctrl + Alt + L
-
Show Reformat File Dialog ( 弹出格式化弹框 ) Ctrl + Alt + Shift + L
-
Optimize Imports ( 去除未引用的包导入声明 ) Ctrl + Alt + O
(二)下载搭档的代码,进行不少于三次的junit测试
1.邀请搭档加入仓库
2.加入搭档的仓库
3.下载搭档的代码
·打开终端,进行clone
·找到complex代码
4.对代码进行Junit测试
·全部正常:
5.git add,git push
·提交至码云
(三)版本控制
- 版本控制提供项目级的 undo(撤销) 功能: 没有什么事情是终结版本, 任何错误必须很容易回滚。 假设你在使用世界上最复杂的文字处理系统。 它具备了所有的能想到的功能,就是没有支持 DELETE(删除) 键。想象你打字的时候得多么的谨慎和缓慢吧, 特别是一篇超大的文档的快临近末尾的时候, 一个不小心就要重头再来(试想你选中所有的文字, 不小心按了 DELETE 键, 因为没有撤销功能,只好重新录入)。编辑文字和版本控制相同,任何时候都需要回滚,无论是一个小时, 一天, 还是一周, 这让你的团队工作自由快速的工作, 而且对于修正错误也非常自信。
- 版本控制允许多人在同一代码上工作, 只要遵守一定的控制原则就行。 再也不会发生诸如一个人覆盖了另一个人编辑的代码,导致那个人的修改无效这样的情况。
- 版本控制系统保存了过去所作的修改的历史记录。如果你遭遇到一些惊讶的代码,通过版本控制系统可以很容易找出是谁干的, 修改了什么, 修改的时间, 如果幸运的话,还能找出原因。
- 版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候也不需要整个团队的停止工作,不需要冻结代码。
- 版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。 这对研究非常有用, 也是重现以前某个有问题的发布版本的基础。
(四)重构
(1)
1.下载搭档的代码
import java.util.*; public class Example8_15 { public static void main(String args[]) { Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); int year = calendar.get(Calendar.YEAR), month = calendar.get(Calendar.MONTH)+1, day = calendar.get(Calendar.DAY_OF_MONTH), hour = calendar.get(Calendar.HOUR_OF_DAY), minute = calendar.get(Calendar.MINUTE), second = calendar.get(Calendar.SECOND); System.out.print("现在的时间是:"); System.out.print(""+year+"年"+month+"月"+day+"日"); System.out.println(" "+hour+"时"+minute+"分"+second+"秒"); int y = 2012,m = 9,d = 1; calendar.set(y,m-1,d); //将日历翻到2012年九月一日,注意8表示九月 long time1 = calendar.getTimeInMillis(); y = 2016; m = 7; day = 1; calendar.set(y,m-1,d); //将日历翻到2016年七月一日 long time2 = calendar.getTimeInMillis(); long subDay = (time2-time1)/(1000*60*60*24); System.out.println(""+new Date(time2)); System.out.println("与"+new Date(time1)); System.out.println("相隔"+subDay+"天"); } }
2.进行重构
重构1:所有类都必须添加创建者信息
重构2://注释应在其上方
重构3:类名要遵循驼峰形式
(五)JAVA密码学
体验加解密---凯撒密码
其加密过程如下:
在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:
c≡m+k mod n (其中n为基本字符个数)
同样,解密过程可表示为:
m≡c+k mod n (其中n为基本字符个数)
public static void main(String args[]) throws Exception{ String s=args[0]; int key=Integer.parseInt(args[1]); String es=""; for(int i=0;i<s.length( );i++) { char c=s.charAt(i); if(c>='a' && c<='z') // 是小写字母 { c+=key%26; //移动key%26位 if(c<'a') c+=26; //向左超界 if(c>'z') c-=26; //向右超界 } else if(c>='A' && c<='Z') // 是大写字母 { c+=key%26; if(c<'A') c+=26; if(c>'Z') c-=26; } es+=c; } System.out.println(es); }
·进行测试
三、遇到的问题及解决办法
问题一:在进行test的时候,找不到Junit包
问题一解决办法:使用everything找到Junit.jar的位置,然后在项目结构里加入即可
四、总结
本次实验主要教我们如何规范自己的代码,使代码不仅能让自己看懂,更能便于他人理解。同时本次实验还学会了如何给自己的码云仓库添加成员,也是非常实用的一点。
码云链接:https://gitee.com/Apollo20175126/java-besti-20175126