实验三 敏捷开发与XP实践-1

1.仔细学习了http://www.cnblogs.com/rocedu/p/4795776.html,发布了一篇关于Google的Java编码的博客,具体内容就不在这里展开了。

2.安装了alibaba 插件,点击左上角的File,然后点击第五个选项Settings,弹出了一个选项框,在左侧点击Plugins,在上面的Marketplace搜索alibaba,然后就可以下载了,下载之后会要求重启IDEA。

3.在IDEA中重新格式化代码。

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));
}
}

但是不清楚为什么,复制到我的IDEA之后,就差不都格式化了。

还是按照要求在IDEA中使用工具(Code->Reformate Code)把代码重新格式化,发现了一些不同。



4.研究Code菜单

在网上查了一些Code菜单中的选项功能。

选项 快捷键 功能
Override Methods Ctrl + O 重写覆盖方法
Implements Methods Ctrl + I 实现接口方法
Gengrate Alt + Insert 生成Construct、Getter/Setter、toString等
Surround With Ctrl + Alt +T 生成包围代码
Unwarp/Remove Ctrl + Shift + Delete 取消代码包围
Reformat Code Ctrl + Alt + L 格式化代码
Move Statement Down Ctrl + Shift + ↓ 方法下移
Move Statement Up Ctrl + Shift + ↑ 方法上移
Move Line Down Alt + Shift + ↓ 代码行下移
Move Line Up Alt + Shift + ↑ 代码行上移

例子:Move Line

将鼠标移动至需要换行的代码行,单击左键,会发现该行会被选定。

使用快捷键或者点击Code菜单,完成换行。

实验三 敏捷开发与XP实践-2

要求:在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

搭档20175333Complex.java代码:

import java.text.DecimalFormat;

public class Complex {
double RealPart;
double ImagePart; public Complex() { } public Complex(double R, double I) {
RealPart = R;
ImagePart = I;
} public void setter(double R, double I) {
RealPart = R;
ImagePart = I;
} public double getterRealPart() {
return RealPart;
} public double getterImagePart() {
return ImagePart;
} @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else {
return false;
}
} @Override
public String toString() {
String s = "";
if (getterRealPart() == 0 && getterImagePart() == 0) {
s = "0";
} else if (getterRealPart() != 0 && getterImagePart() == 0) {
s = s + getterRealPart();
} else if (getterRealPart() == 0 && getterImagePart() != 0) {
s = s + getterImagePart() + "i";
} else {
if (getterImagePart() < 0) {
s = s + getterRealPart() + getterImagePart() + "i";
} else {
s = s + getterRealPart() + "+" + getterImagePart() + "i";
} }
return s;
} public Complex ComplexAdd(Complex a) {
return new Complex((getterRealPart() + a.getterRealPart()), (getterImagePart() + a.getterImagePart()));
} public Complex ComplexSub(Complex a) {
return new Complex((getterRealPart() - a.getterRealPart()), (getterImagePart() - a.getterImagePart()));
} public Complex ComplexMulti(Complex a) {
double imaginePart = getterRealPart() * a.getterImagePart() + getterImagePart() * a.getterRealPart();
double realPart = getterRealPart() * a.getterRealPart() - getterImagePart() * a.getterImagePart();
return new Complex(realPart, imaginePart);
} public Complex ComplexDiv(Complex a) throws Exception {
double imaginePart = -getterRealPart() * a.getterImagePart() + getterImagePart() * a.getterRealPart();
double realPart = getterRealPart() * a.getterRealPart() + getterImagePart() * a.getterImagePart();
double div = a.getterRealPart() * a.getterRealPart() + a.getterImagePart() * a.getterImagePart();
if (div == 0) {
throw new Exception();
}
realPart = realPart / div;
imaginePart = imaginePart / div;
DecimalFormat decimalFormat = new DecimalFormat("0.0");
return new Complex(Double.valueOf(decimalFormat.format(realPart)), Double.valueOf(decimalFormat.format(imaginePart)));
}
}

测试代码ComplexTest

import junit.framework.TestCase;
import org.junit.Test; public class ComplexTest extends TestCase {
Complex complex = new Complex(34,56);
Complex complex2 = new Complex();
public void testGetterRealPart() {
assertEquals(34.0,complex.getterRealPart());
complex.setter(0,-1);
assertEquals(0.0,complex.getterRealPart());
complex.setter(-3.6,5);
assertEquals(-3.6,complex.getterRealPart());
} public void testGetterImagePart() {
assertEquals(56.0,complex.getterImagePart());
complex.setter(34,-57.233);
assertEquals(-57.233,complex.getterImagePart());
complex.setter(4,0);
assertEquals(0.0,complex.getterImagePart());
} public void testEquals() {
assertTrue(complex.equals(complex));
Complex complex2 = new Complex();
assertFalse(complex.equals(complex2));
} public void testToString() {
complex.setter(0,0);
assertEquals("0",complex.toString());
complex.setter(0.2,3);
assertEquals("0.2+3.0i",complex.toString());
complex.setter(4.5,0);
assertEquals("4.5",complex.toString());
complex.setter(0,6);
assertEquals("6.0i",complex.toString());
complex.setter(-5.6,-6.7);
assertEquals("-5.6-6.7i",complex.toString());
} public void testComplexAdd() {
complex2 = complex.ComplexAdd(new Complex(-33,-57));
assertEquals("1.0-1.0i",complex2.toString());
assertEquals("33.0+57.0i",complex2.ComplexAdd(complex).toString());
} public void testComplexSub() {
complex2 = complex.ComplexSub(new Complex(33,57));
assertEquals("1.0-1.0i",complex2.toString());
assertEquals("-33.0-57.0i",complex2.ComplexSub(complex).toString());
} public void testComplexMulti() {
complex.setter(-3.5,5);
complex2.setter(0,0);
assertEquals("0",complex.ComplexMulti(complex2).toString());
complex2.setter(10,-3);
assertEquals("-20.0+60.5i",complex.ComplexMulti(complex2).toString());
}
@Test(expected = Exception.class)
public void testComplexDiv() throws Exception{
complex.setter(3,3);
complex2.setter(0,9);
assertEquals("0.3-0.3i",complex.ComplexDiv(complex2).toString());
complex.setter(0,0);
assertEquals("0",complex.ComplexDiv(complex2).toString());
}
}

实验三 敏捷开发与XP实践-3

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。

重构后的代码:

import java.text.DecimalFormat;

public class Complex {
double realPart;
double imagePart; public Complex() { } public Complex(double r, double i) {
realPart = r;
imagePart = i;
} public void set(double r, double i) {
realPart = r;
imagePart = i;
} public double getRealPart() {
return realPart;
} public double getImagePart() {
return imagePart;
} @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else {
return false;
}
} @Override
public String toString() {
String s = "";
if (getRealPart() == 0 && getImagePart() == 0) {
s = "0";
} else if (getRealPart() != 0 && getImagePart() == 0) {
s = s + getRealPart();
} else if (getRealPart() == 0 && getImagePart() != 0) {
s = s + getImagePart() + "i";
} else {
if (getImagePart() < 0) {
s = s + getRealPart() + getImagePart() + "i";
} else {
s = s + getRealPart() + "+" + getImagePart() + "i";
} }
return s;
} public Complex complexAdd(Complex a) {
return new Complex((getRealPart() + a.getRealPart()), (getImagePart() + a.getImagePart()));
} public Complex complexSub(Complex a) {
return new Complex((getRealPart() - a.getRealPart()), (getImagePart() - a.getImagePart()));
} public Complex complexMulti(Complex a) {
double imaginePart = getRealPart() * a.getImagePart() + getImagePart() * a.getRealPart();
double realPart = getRealPart() * a.getRealPart() - getImagePart() * a.getImagePart();
return new Complex(realPart, imaginePart);
} public Complex complexDiv(Complex a) throws Exception {
double imaginePart = -getRealPart() * a.getImagePart() + getImagePart() * a.getRealPart();
double realPart = getRealPart() * a.getRealPart() + getImagePart() * a.getImagePart();
double div = a.getRealPart() * a.getRealPart() + a.getImagePart() * a.getImagePart();
if (div == 0) {
throw new Exception();
}
realPart = realPart / div;
imaginePart = imaginePart / div;
DecimalFormat decimalFormat = new DecimalFormat("0.0");
return new Complex(Double.valueOf(decimalFormat.format(realPart)), Double.valueOf(decimalFormat.format(imaginePart)));
}
}

实验三 敏捷开发与XP实践-4

Java密码学

1.凯撒密码

凯撒密码是在密码学老师讲过的古典密码体制,在这里我将老师的代码重构,规范了编码标准。

过程主要结合IDEA中的Reformat Code之后给出的提示,进行修改代码。

/**
* Caesa class
*
* @author 20175307gsc
* @date 2019/05/03
*/
public class Caesa {
public static void main(String[] args) throws Exception {
String s = args[0];
int key = Integer.parseInt(args[1]);
StringBuilder es = new StringBuilder();
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.append(c);
}
System.out.println(es.toString());
}
}

最主要的重构在于将原来的String es ="",改为创建一个Stringbuilder对象:StringBuilder es = new StringBuilder();这样做的原因是因为IDEA在原来的字符串加法给出了提示:

String concatenation '+=' in loop less... (Ctrl+F1)

Inspection info: Reports String concatenation in loops. As every String concatenation copies the whole String, usually it is preferable to replace it with explicit calls to StringBuilder.append() or StringBuffer.append().

提示我们应该使用 StringBuilder.append() or StringBuffer.append()方法来完成字符串的更替。

在https://www.cnblogs.com/jack-Leo/p/6684447.html这篇博客中讲到“我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生”。

2.Java对称加密-DES算法

1.将密钥通过字节保存在文件中:

重构的点在于将最后打印kb数组的

for(int i=0;i<kb.length;i++){
System.out.print(kb[i]+",");
}

替换成了foreach语句格式:

  for(元素类型type 元素变量value : 遍历对象obj) {

    引用x的java语句;  

}

for (byte i : kb) {   
System.out.print(i+ ",");
}

在这里还要说明的一点是,kb是一个byte类型的数组,不能将循环变量i设为常用的int类型去遍历kb,应该设为byte类型去输出kb数组。

2.将SEnc.java中的默认明文改为了手动输入明文,提高了代码的实用性。

Scanner reader = new Scanner(System.in);
String s = reader.nextLine();

通过Scanner读入s。



小结:因为不是和很懂代码,所以关键的代码并没有进行修改,只是在输入输出上略做了调整和规范。

2018-2019-2 20175307实验三《敏捷开发与XP实践》实验报告的更多相关文章

  1. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  2. 20175212童皓桢 实验三敏捷开发与XP实践实验报告

    20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...

  3. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  4. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  5. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  6. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  7. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. Linux 内核剖析

    https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...

  2. 动态规划-递推-HDU2048

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2048 全错=全不匹配 设当前全错的个数是dp[n] 那么前(n-1)个全错的话,第n个数就可以从前(n- ...

  3. Linux多线程服务器端编程

    目录 Linux多线程服务器端编程 线程安全的对象生命期管理 对象的销毁线程比较难 线程同步精要 借shared_ptr实现写时拷贝(copy-on-write) 多线程服务器的适用场合与常用编程模型 ...

  4. 求bit中1的个数有几种做法

    原文 求bit中1的个数有几种做法: - x & (x - 1) - Hamming weight的经典求法,基于树状累加:http://en.wikipedia.org/wiki/Hammi ...

  5. [SDOI2019]快速查询

    [SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...

  6. CentOS安装ruby, Haskall,io语言

    安装ruby yum install ruby irb rdoc 安装Haskall yum install ghc 安装io语言 安装io语言,需要先安装cmake不过不要使用yum来进行安装,yu ...

  7. Python入门习题4.文本进度条

    例4.1.设置一组文本进度条,使之运行效果如下: --------执行开始--------% 0 [->**********]%10 [*->*********]%20 [**->* ...

  8. POJ 1438 One-way Traffic (混合图+边双连通)

    <题目链接> 题目大意: 给定一个混合图,问你在能够使得图中所有点能够两两到达的情况下,尽可能多的将无向边变成有向边,输出这些无向边的变化方案. 解题分析:这与之前做过的这道题非常类似 P ...

  9. C#设计模式:原型模式(Prototype Pattern)

    一,原型模式:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建.(包含深度克隆和浅克隆) 主要面对的问题是:“某些结构复杂的对象”的创建工作:由于 ...

  10. 1. ZooKeeper简介

    1. ZooKeeper是什么 ZooKeeper致力于提供一个高性能.高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoo ...