- 在IDEA的setting中找到plugins並搜索alibaba,點擊install進行安裝
- 重啓IDEA後,在代碼中右擊點擊編碼規約掃描就可使用了
對老師給的示例代碼進行掃描後的結果以下:
java
規範後的代碼以下:git
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)); } } }
- 使用工具(Code->Reformate Code)格式化代碼 - 在code中選擇Reformate Code格式化代碼
- code菜單中的功能 - Override Methods(ctrl+O):重載基本類的方法
- Surround With(Ctrl+Alt+T):使用if-else、for、while等語句包裝代碼段
- Comment with Line Comment(Ctrl+/):將本行變成註釋
- 搭檔的Complex代碼以下:
package shiyan3; /** * @author zyr * @date 2019/4/30 */ public class Complex { // 定義屬性並生成getter,setter double RealPart; double ImagePart; // 定義構造函數 public Complex(){ RealPart = 0; ImagePart = 1; } public Complex(double R,double I){ ImagePart = I; RealPart = R; } //override Object public boolean Equals(Object obj){ if(this == obj) { return true; } if(!(obj instanceof Complex)) { return false; } Complex complex = (Complex) obj; if(complex.RealPart != ((Complex) obj).RealPart) { return false; } if(complex.ImagePart != ((Complex) obj).ImagePart) { return false; } return true; } @Override public String toString() { String string = ""; if (ImagePart > 0) string = RealPart + "+" + ImagePart + "i"; if (ImagePart == 0) string = RealPart + ""; if (ImagePart < 0) string = RealPart + " " + ImagePart + "i"; return string; } // 定義公有方法:加減乘除 Complex ComplexAdd(Complex a) { double b=0,c=0; b = RealPart+a.RealPart; c = ImagePart+a.ImagePart; System.out.println("("+RealPart+"+"+ImagePart+"i) + ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } Complex ComplexSub(Complex a) { double b=0,c=0; b = RealPart-a.RealPart; c = ImagePart-a.ImagePart; System.out.println("("+RealPart+"+"+ImagePart+"i) - ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } Complex ComplexMulti(Complex a) { double b=0,c=0; b = RealPart*a.RealPart; c = ImagePart*a.ImagePart; System.out.println("("+RealPart+"+"+ImagePart+"i) * ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } Complex ComplexDiv(Complex a) { if(a.RealPart==0||a.ImagePart==0) { System.out.println("被除數不能爲0,錯誤"); return new Complex(); } double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart); double b=0,c=0; b = (RealPart*a.RealPart+ImagePart*a.ImagePart)/d; c = Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d); System.out.println("("+RealPart+"+"+ImagePart+"i) / ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } }
- 要測試的類testAd、testSub、testMulti、testDiv - 測試代碼以下:
package shiyan3; import junit.framework.TestCase; import org.junit.Test; public class ComplexTest1 extends TestCase { Complex complex = new Complex(1, 1); @Test public void testAdd() { assertEquals(new Complex(3.0, 3.0), complex.ComplexAdd(new Complex(2.0, 2.0))); } @Test public void testSub() { assertEquals(new Complex(-5.0, -2.0), complex.ComplexSub(new Complex(6.0, 3.0))); } @Test public void testMulti() { assertEquals(new Complex(3.0, 2.0), complex.ComplexMulti(new Complex(3.0, 2.0))); } @Test public void testDiv() { assertEquals(new Complex(1.0, 1.0), complex.ComplexDiv(new Complex(1.0, 1.0))); assertEquals(new Complex(0.0, 0.0), complex.ComplexDiv(new Complex(1.0, 0.0))); //邊緣測試 } }
將測試代碼傳到搭檔的碼雲,git log以下:
算法
- 重構(Refactor),就是在不改變軟件外部行爲的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變動 。 - 修改軟件的四種動機: - 增長新功能 - 原有功能有BUG - 改善原有程序的結構 - 優化原有系統的性能 - 須要重構的地方 - 代碼重複 - 方法過長 - 參數列過長 - 條件邏輯過分複雜 - 分支語句 - 一個完整的重構流程應包括 - 從版本控制系統代碼庫中Check out code - 讀懂代碼(包括測試代碼) - 發現bad smell - Refactoring - 運行全部的Unit Tests - 往代碼庫中Check in code - 重構1:添加做者和日期
- 重構2:重寫Equals時的@override標誌
- 重構3:規範方法名
修改後的代碼app
package shiyan3; /** * @author zyr * @date 2019/4/30 */ public class Complex { // 定義屬性並生成getter,setter double RealPart; double ImagePart; // 定義構造函數 public Complex(){ RealPart = 0; ImagePart = 1; } public Complex(double R,double I){ ImagePart = I; RealPart = R; } //override Object public boolean Equals(Object obj){ if(this == obj) { return true; } if(!(obj instanceof Complex)) { return false; } Complex complex = (Complex) obj; if(complex.RealPart != ((Complex) obj).RealPart) { return false; } if(complex.ImagePart != ((Complex) obj).ImagePart) { return false; } return true; } @Override public String toString() { String string = ""; if (ImagePart > 0) string = RealPart + "+" + ImagePart + "i"; if (ImagePart == 0) string = RealPart + ""; if (ImagePart < 0) string = RealPart + " " + ImagePart + "i"; return string; } // 定義公有方法:加減乘除 Complex ComplexAdd(Complex a) { double b=0,c=0; b = RealPart+a.RealPart; c = ImagePart+a.ImagePart; System.out.println("("+RealPart+"+"+ImagePart+"i) + ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } Complex ComplexSub(Complex a) { double b=0,c=0; b = RealPart-a.RealPart; c = ImagePart-a.ImagePart; System.out.println("("+RealPart+"+"+ImagePart+"i) - ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } Complex ComplexMulti(Complex a) { double b=0,c=0; b = RealPart*a.RealPart; c = ImagePart*a.ImagePart; System.out.println("("+RealPart+"+"+ImagePart+"i) * ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } Complex ComplexDiv(Complex a) { if(a.RealPart==0||a.ImagePart==0) { System.out.println("被除數不能爲0,錯誤"); return new Complex(); } double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart); double b=0,c=0; b = (RealPart*a.RealPart+ImagePart*a.ImagePart)/d; c = Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d); System.out.println("("+RealPart+"+"+ImagePart+"i) / ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i"); return new Complex(b,c); } }
和搭檔對各類算法進行學習研究後,咱們選擇了MD5
算法:ide
使用Java計算指定字符串的消息摘要,java.security
包中的MessageDigest
類提供了計算消息摘要的方法函數
首先生成對象,執行其update()方法能夠將原始數據傳遞給該對象,而後執行其digest( )方法便可獲得消息摘要。具體步驟以下:工具
MessageDigest
對象:MessageDigest m=MessageDigest.getInstance("MD5");
m.update(x.getBytes("UTF8" ));
byte s[ ]=m.digest( );
String result=""; for (int i=0; i<s.length; i++){ result+=Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6); }
產品代碼:性能
import java.io.UnsupportedEncodingException; import java.security.*; public class MD5Encrypt { public static void main(String args[]) throws Exception { String originalStr = args[0]; MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } try { m.update(originalStr.getBytes("UTF8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } byte byteStr[] = m.digest(); GetResult getResult = new GetResult(); for (int i = 0; i < byteStr.length; i++) { getResult.result += Integer.toHexString((0x000000ff & byteStr[i]) | 0xffffff00).substring(6); } } public static class GetResult { String result = ""; } }
/*測試輸入輸出*/ String str = new String(originalStr); System.out.println("明文:" + str); System.out.println("密文:" + getResult.result);
我經過本次實驗學會了如何規範、格式化代碼,如何將搭檔加入本身的碼雲項目並進行合做編寫代碼,如何重構以及Java密碼學相關知識。在本身上手實踐操做過程當中,加深了對平時不清楚的知識點的理解,也掌握了重構等新知識點。單元測試