1. 程式人生 > >實驗三 《敏捷開發與XP實踐》實驗報告

實驗三 《敏捷開發與XP實踐》實驗報告

cas font 一個 pan nes tostring 信息 自己 roc

一、實驗內容

任務一

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實踐》實驗報告