实验三 敏捷开发与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. Item-Based Collaborative Recommender System

    与User-Based Collaborative Recommender System认为‘类似的用户会对同一个item给出类似的打分’不同,Item-Based Collaborative Rec ...

  2. Git/SVN相关

    svn配置不当: svn1.6之前的版本,通过访问.svn/.entries metasploit auxiliary/scanner/http/svn_scanner 在svn1.7之后的版本,通过 ...

  3. springboot异步任务、定时任务

    打开浏览器 http://localhost:8080/hello ,连续刷新可以看到不会 等待 3秒时间了,pom.xml controller service 代码如下. -----------S ...

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

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

  5. spring cloud gateway获取response body

    网关发起请求后,微服务返回的response的值要经过网关才发给客户端.本文主要讲解在spring cloud gateway 的过滤器中获取微服务的返回值,因为很多情况我们需要对这个返回进行处理.网 ...

  6. [Python3 填坑] 013 几个类相关函数的举例

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 issubclass() 2.2 isinstance() 2.3 hasattr() 2.4 getattr() 2.5 setatt ...

  7. idea 激活步骤

    如果你的idea是已经激活过,但是到期了,点击help-register 删除之前的license server(不是通过注册服务激活的,就不用管) 激活步骤如下: 1.修改hosts文件,把 0.0 ...

  8. kmp(前缀出现次数next应用)

    http://acm.hdu.edu.cn/showproblem.php?pid=3336 Count the string Time Limit: 2000/1000 MS (Java/Other ...

  9. Day4 --- Python中的控制结构(if, for, while, try...expect..)

    if for while 可以参考 : https://www.cnblogs.com/HYLering/p/10051906.html try  是异常处理里面的 可以参考 : https://ww ...

  10. 58-python基础-python3-集合-集合常用方法-删除元素-remove()-discard()-pop()-clear()

    删除元素-remove()-discard()-pop()-clear() 1-remove() remove()用于删除一个set中的元素,这个值在set中必须存在,如果不存在的话,会引发KeyEr ...