实验三 敏捷开发与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. vue-slot的使用

    父组件在子组件内套的内容,是不显示的:vue有一套内容分发的的API,<slot>作为内容分发的出口,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示.不显示.在哪个地方显示.如 ...

  2. Python笔记(十二)_文件

    文件的打开模式 'r':以只读的方式打开文件(默认) 'w':以写入的方式打开文件,会覆盖已存在的文件 'x':用写入的方式打开文件,如果文件已存在,会抛出异常 'a':用写入的方式打开文件,如果文件 ...

  3. CPU高速缓存行与内存关系 及并发MESI 协议(转载)

    原文链接 http://www.cnblogs.com/jokerjason/p/9584402.html 先来一个整体图 一. 大致关系: CPU Cache --> 前端总线 FSB (下图 ...

  4. mybatis全局配置mybatis-config.xml

    大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBatis 的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBa ...

  5. Codeforces 1061C (DP+滚动数组)

    题面 传送门 分析 考虑DP 设\(dp[i][j]\)表示前i个数选出的序列长度为j的方案数 状态转移方程为: \[ dp[i][j]= \begin{cases}dp\left[ i-1\righ ...

  6. SQL server 聚集索引与主键的区别

    主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引. 所以在一个(或一组)字段上有主键,只能说明他上面有个索引,但不一定就是聚集索引. 例如下面: ...

  7. JVM(16)之 双亲委派模型

    开发十年,就只剩下这套架构体系了! >>>   在上一篇博文中,我们知道了如何获得二进制的字节流,并根据获得的字节流去装载一个类.同时也了解到类加载器的存在,每个加载器对应着不同的加 ...

  8. 获取class的儿子,报错undefined

       var tds = document.getElementsByClassName("dv1")[0].children     console.log(tds) 因为cla ...

  9. go中字符串类型string的用法

    示例 // 字符串类型string的用法 package main import ( "fmt" "unsafe" ) func main() { // 字符串 ...

  10. JavaScript面向对象编程(1)-- 基础

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...