实验三 《敏捷开发与XP实践》实验报告
一、实验内容
任务一
1.参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。
2.在IDEA中使用工具
(Code->Reformate Code)
把下面代码重新格式化,再研究一下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));
}
}
实验步骤
1.安装alibaba插件
- 打开IDEA
File->Settings->Plugins->Marketplace
- 搜索Alibaba,安装Alibaba Java Code Guidelines 插件
- 完成后,重启IDEA
2.完成代码格式化
- 左侧src目录下对要进行格式化的代码单机右键,选择
编码规约扫描

这是扫描后的代码,有两处问题,原因都是在if/else/for/while/do语句中未使用大括号

这是完成格式化之后的代码
3.Code菜单使用
我觉得比较好用的是
Override Methodshe 和 Surround With
- 其中第一个能够显示被覆盖的方法
- 第二个能够将选定语句直接嵌入一种需要的结构里,非常方便
任务二
在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
1.搭档项目加入
通过邀请,可以看到搭档已加入

2.下载搭档代码
//搭档代码
public class Complex {
double RealPart=0;
double ImagePart=0;
public Complex(){}
public Complex(double RealPart,double ImagePart){
this.RealPart=RealPart;
this.ImagePart=ImagePart; }
public double getRealPart(){
return RealPart;
}
public double getImagePart(){
return ImagePart;
}
public String toString(){
String s = "";
double r=RealPart;
double i=ImagePart;
if(r==0&&i==0){
s="0";
}
else if(r==0&&i!=0){
s=i+"i";
}
else if(r!=0&&i==0){
s=r+"";
}
else if(r!=0&&i<0){
s=r+""+i+"i";
}
else
{
s=r+"+"+i+"i";
}
return s;
}
public boolean equals(Object obj){
if(this==obj){
return true;
}
else return false;
} public Complex ComplexAdd(Complex a){
return new Complex(RealPart+a.getRealPart(),ImagePart+a.getImagePart());
}
public Complex ComplexSub(Complex a){
return new Complex(RealPart-a.getRealPart(),ImagePart-a.getImagePart());
}
public Complex ComplexMulti(Complex a){
double r=RealPart*a.getRealPart()-ImagePart*a.getImagePart();
double i =ImagePart*a.getRealPart()+RealPart*a.getImagePart();
return new Complex(r,i);
}
public Complex ComplexDiv(Complex a){
double r=(RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart);
double i=(ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart);
return new Complex(r,i);
}
}
测试代码
import junit.framework.TestCase;
public class ComplexTest extends TestCase {
private Complex a = new Complex(1, 5);
private Complex b = new Complex(2, -3); public void testEquals() {
assertTrue(a.equals(a));
assertFalse(b.equals(a));
} public void testToString() {
assertEquals("1.0+5.0i", a.toString());
assertEquals("2.0-3.0i", b.toString());
} public void testComplexAdd() {
assertEquals("3.0+2.0i", a.complexadd(b).toString());
assertEquals("4.0-6.0i", b.complexadd(b).toString());
} public void testComplexSub() {
assertEquals("-1.0+8.0i", a.complexsub(b).toString());
assertEquals("0", b.complexsub(b).toString());
} public void testComplexMulti() {
assertEquals("-24.0+10.0i",a.complexmulti(a).toString());
assertEquals("17.0+7.0i",a.complexmulti(b).toString());
} public void testComplexDiv() {
assertEquals("0.38461538461538464+13.0i",a.complexdiv(a).toString());
}
}
3.Junit测试截图

4.代码提交
-在虚拟机里进入主目录
输入git clone 搭档码云链接
-然后主目录下就有了你搭档的仓库
-进入仓库,输入调试好的代码
git add . ->git commit -m "" ->git push


可以看到代码已经上传成功
任务三
http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
1.重构
用搭档的Complex为例
重构前代码见任务二
重构中的问题
1.命名未采用驼峰形式
2.重写的方法没有加入@Override
3.类没有添加创建者信息
//重构后代码
import org.jetbrains.annotations.Contract;
/**
* @author 20175120pyc
*/
@SuppressWarnings("ALL")
public class Complex {
double realpart = 0;
double imagepart = 0; public Complex() {
} Complex(double realpart, double imagepart) {
this.realpart = realpart;
this.imagepart = imagepart; } public double getRealPart() {
return realpart;
} private double getImagepart() {
return imagepart;
} @Override
public String toString() {
String s = "";
double r = realpart;
double i = imagepart;
if (r == 0 && i == 0) {
s = "0";
} else if (r == 0 && i != 0) {
s = i + "i";
} else if (r != 0 && i == 0) {
s = r + "";
} else if (r != 0 && i < 0) {
s = r + "" + i + "i";
} else {
s = r + "+" + i + "i";
}
return s;
} @Override
@Contract(value = "null -> false", pure = true)
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else {
return false;
}
} public Complex complexadd(Complex a) {
return new Complex(realpart + a.getRealPart(), imagepart + a.getImagepart());
} public Complex complexsub(Complex a) {
return new Complex(realpart - a.getRealPart(), imagepart - a.getImagepart());
} public Complex complexmulti() {
return complexmulti();
} public Complex complexmulti(Complex a) {
double r = realpart * a.getRealPart() - imagepart * a.getImagepart();
double i = imagepart * a.getRealPart() + realpart * a.getImagepart();
return new Complex(r, i);
} Complex complexdiv(Complex a) {
double r = (realpart * a.imagepart + imagepart * a.realpart) / (a.imagepart * a.imagepart + a.realpart * a.realpart);
double i = (imagepart * a.imagepart + realpart * a.realpart) / (a.realpart * a.realpart + a.realpart * a.realpart);
return new Complex(r, i);
}
}
代码规约扫描截图

搭档码云链接:https://gitee.com/zxjacdl/zxj175221/tree/master/20175120pyc
任务四
以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
提交学习成果码云链接和代表性成果截图,要有学号水印。
- 我们编写了凯撒密码
import java.util.Scanner;
/**
* @author 20175120pyc
*/
@SuppressWarnings("All")
public class Caeser {
/**
定义密钥字母表
*/
private String alphabet;
/**
定义密钥 key
*/
private int key;
public Caeser(String alphabet, int key) {
// 根据不同的字母表和不同的密钥生成一个新的凯撒算法,达到通用的目的
super();
this.alphabet = alphabet;
this.key = key;
}
public String encode(String from) {
//凯撒加密算法,传入明文字符串,返回一个密文字符串
String to = "";
for (int i = 0; i < from.length(); i++) {
to += alphabet.charAt((alphabet.indexOf(from.charAt(i))+key)%alphabet.length());
}
return to;
} public static void main(String[] args) {
Caeser caeser = new Caeser("abcdefghijklmnopqrstuvwxyz", 3);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要加密的字符串");
//输入字符串
String str =scanner.nextLine();
//调用加密方法进行加密
String result = caeser.encode(str);
// 得到结果
System.out.print(result);
}
}
运行截图

二、实验过程中的问题与解决
问题:添加创建者信息时,完成添加后仍然显示格式错误
解决:
/**
* @author 20175120pyc
*/
//在这里添加 @SuppressWarnings("All")
实验三 《敏捷开发与XP实践》实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
随机推荐
- 解读:nginx的一个神秘配置worker_cpu_affinity
今天在查看nginx的相关知识的时候发现了一个nginx之前不认识的配置:worker_cpu_affinity. nginx默认是没有开启利用多核cpu的配置的.需要通过增加worker_cpu_a ...
- 使用Atom写你的笔记
使用Atom写你的笔记 本文参考简书笔记. 使用sync-settings同步你的Atom设置 使用sync-settings插件需要以下3个条件: 电脑已安装Atom Atom内已安装sync-se ...
- 进程之间的通讯Queue简单应用
#进程间通讯--Queue #Process有时需要通信的,操作系统提供了很多机制来实现进程之间的通讯 #而Queue就是其中一个 #1.Queue的使用 #可以使用multiprocessing模块 ...
- Linux多线程服务器端编程
目录 Linux多线程服务器端编程 线程安全的对象生命期管理 对象的销毁线程比较难 线程同步精要 借shared_ptr实现写时拷贝(copy-on-write) 多线程服务器的适用场合与常用编程模型 ...
- tensorflow学习框架(炼数成金网络版学习记录)
chapter1 #变量 import tensorflow as tf x = tf.Variable([1,2]) a = tf.constant([3,3]) #增加一个减法op sub = t ...
- 《JAVA设计模式》之中介者模式(Mediator)
在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从 ...
- 【转载】sizeof()、strlen()、length()、size()详解和区别
c/c++中获取字符串长度.有以下函数:size().sizeof() .strlen().str.length();一.数组或字符串的长度:sizeof().strlen()1.sizeof():返 ...
- Android APP 登陆模块
首先我想强调一点.这个登陆的模块最好是放在另外一个线程里面来实现.否则有可能会爆出一系列的问题, 然后再与主UI 交互.这样就不会爆ANR异常 1.对于登陆模块的.首先大体的逻辑肯定是要清晰的. ...
- JVM(15)之 类加载器
开发十年,就只剩下这套架构体系了! >>> 今天我们将类加载机制5个阶段中的第一个阶段,加载,又叫做装载.为了便于阅读,以下都叫做装载. 装载的第一步就是要获得二进制的字节 ...
- hud2243 考研路茫茫——单词情结
考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...