20165304实验三

一、实验报告封面

课程:Java程序设计 班级:1653班

姓名:李松杨 学号:20165304

指导教师:娄嘉鹏 实验日期:2018年4月28日

实验时间:15:35 - 17:15 实验序号:三

实验名称:敏捷开发与XP实践

二、实验内容

  • 敏捷开发与XP实践-1

实验要求: 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

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中下载Alibaba Java Code Guidelines插件来让我们的编写更加优雅。

我们可以通过Jetbrains官方仓库来安装:打开 Settings ->Plugins -> Browse repositories...

在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDEA即可生效。

![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428122809299-1158304107.png)

在Code中可以将代码格式化。格式化前代码是这样的:
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428123121051-699811721.png)

格式化后是这样的:
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428123146681-719681439.png)

Code中的功能不止于此,Override Methods、Implement Methods、Surround With等。我认为最好用的是Surround With这个功能,它能使用if-else、for、do-while等来修饰代码。
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428123207475-1726227315.png)

![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428123226069-135573845.jpg)

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

实验要求:

在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;

提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
代码如图
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428123745444-861032875.png)

可以进行单元测试的方法有ComplexAdd()、ComplexSub()、ComplexMulti()、ComplexDiv()。

进行单元测试的运行截图为:![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428123805908-1993618277.png)

- 敏捷开发与XP实践-3
----------
实验要求:完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
实验过程:重构(Refactor),是指在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
其实说简单些就是在不改变程序本质的基础上,让程序更加的规范化。
在Idea中有一个功能菜单就是用来重构的:
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428124347405-1653858234.png)

下载代码为
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428124415188-1638581902.png)
这段代码的问题有:类名不符合编码标准、定义的变量过多、判断语句过长。
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428124459952-1054390697.png)
重构之后为
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428124527161-1114589203.jpg)

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

    实验过程:

我和搭档进行的是凯撒密码的实现。凯撒密码的加密和解密算法相当来说比较简单。
其加密过程如下:

若明文记为m,密文记为c,秘钥为k,加密变换记为Encrypt(k,m),解密变换记为Decrypt(k,m))。凯撒密码的加密过程可记为如下一个变换:

c≡m+k mod n (其中n为基本字符个数)

同样,解密过程可表示为:
m≡c+k mod n (其中n为基本字符个数)

我们的加密代码为
    import java.util.Scanner;

    public class Test {
    public static void main(String[] args) {
        System.out.print("请输入明文:");
        Scanner a=new Scanner(System.in);
        String b=a.nextLine();
        System.out.print("请输入秘钥:");
        Scanner c=new Scanner(System.in);
        int key=c.nextInt();
        Encrypt(b, key);
    }

    public static void Encrypt(String str,int k){
        String s="";
        for (int i = 0; i < str.length(); i++) {
            char c=str.charAt(i);
            if(c>='a'&&c<='z'){
                c+=k%26;
                if(c<'a')
                    c+=26;
                if(c>'z')
                    c-=26;

            }else if(c>='A'&&c<='Z'){
                c+=k%26;
                if(c<'A')
                    c+=26;
                if(c>'Z')
                    c-=26;
            }
            s+=c;
        }
        System.out.println(str+" 加密为: "+s);
    }
    }

解密代码为:

    import java.util.Scanner;
    public class Test2 {
    public static void main(String[] args) {
        System.out.print("请输入密文:");
        Scanner a=new Scanner(System.in);
        String b=a.nextLine();
        System.out.print("请输入秘钥:");
        Scanner c=new Scanner(System.in);
        int key=c.nextInt();
        Decrypt(b, key);
    }

    public static void Decrypt(String str,int k){
        String s="";
        for (int i = 0; i < str.length(); i++) {
            char c=str.charAt(i);
            if(c>='a'&&c<='z'){
                c-=k%26;
                if(c<'a')
                    c+=26;
                if(c>'z')
                    c-=26;

            }else if(c>='A'&&c<='Z'){
                c-=k%26;
                if(c<'A')
                    c+=26;
                if(c>'Z')
                    c-=26;
            }
            s+=c;
        }
        System.out.println(str+" 解密为: "+s);
    }
    }
截图
![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428125411731-1745633982.jpg)

![](https://images2018.cnblogs.com/blog/1284381/201804/1284381-20180428125416493-1992196191.jpg)

实验感悟
----------
通过本次实验,我体会到了一些以前写代码十分不规范的地方,并且加以改正了。
原文地址:https://www.cnblogs.com/zl1998827/p/8966924.html