標籤:org set ide 實驗報告 使用 重點 分享 master http
20165104-JAVA第三次實驗一、實驗目的與要求
- 完成實驗、撰寫實驗報告,注意實驗報告重點是運行結果,遇到的問題以及分析
- 實驗報告中統計自己的PSP(Personal Software Process)時間
- 掌握使用IDEA完成基礎編程與程式調試的能力
二、實驗內容XP基礎XP核心實踐相關工具三、實驗步驟安裝alibaba 外掛程式,解決代碼中的規範問題
- 開啟
Settings ->Plugins -> Browse repositories...在搜尋方塊輸入alibaba即可看到Alibaba Java Code Guidelines外掛程式,點擊Install進行安裝,然後重啟IDEA生效
- 在IDEA左目錄欄裡右鍵
.java檔案表徵圖,選擇編碼約規掃描,然後根據下方報錯裡修改自己的代碼格式。
- 規範例代碼
學習Code菜單
使用Code->Reformate Code,將代碼格式化
與搭檔互相加入項目
- 修改與編輯操作
與原來對自己的項目操作相同,改好後主要以標註修改內容,上傳
- 實驗:
重構
- 重新命名:對類,介面,方法,屬性等重新命名,以使得更易理解
- 抽取代碼:將方法內的一段代碼抽取為另一個方法,以使得該段代碼可以被其他方法調用,這是重構中很重要很常用的,此舉可以極大的精鍊代碼,減少方法的程式碼數
- 封裝欄位:將類的某個欄位轉換成屬性,可以更加合理的控制欄位的訪問
- 抽取介面:將類的某些屬性,方法抽取組成個介面,該類自動實現該介面
- 提升方法內的局部變數為方法的參數:這主要是在寫代碼的過程中會使用到
- 刪除參數:將方法的一個或多個參數刪掉
- 重排參數:將方法的參數順序重新排列
- 實驗如下:
Java與密碼學學習體驗加解密---凱撒密碼
public class Caesar{ public static void main(String []args) throws Exception{ String s=args[0]; int key=Integer.parseInt(args[1]); String es=""; for(int i=0;i<s.length( );i++) { char c=s.charAt(i); // 是小寫字母 c = getC(key, c); es+=c; } System.out.println(es); } private static char getC(int key, char c) { if(c>=‘a‘ && c<=‘z‘) { //移動key%26位 c = move(key, c); if(c<‘a‘) { //向左超界 c = changeCplus(c); } if(c>‘z‘) { //向右超界 c = changeCminus(c); } } // 是大寫字母 else if(c>=‘A‘ && c<=‘Z‘) { c = move(key, c); if(c<‘A‘) { c = changeCplus(c); } if(c>‘Z‘) { c = changeCminus(c); } } return c; } private static char changeCminus(char c) { c -= 26; return c; } private static char changeCplus(char c) { c += 26; return c; } private static char move(int key, char c) { c+=key%26; return c; }}
Java摘要演算法- MD5
使用Java計算指定字串的訊息摘要。
java.security包中的MessageDigest類提供了計算訊息摘要的方法,
首先產生對象,執行其update()方法可以將未經處理資料傳遞給該對象,然後執行其digest( )方法即可得到訊息摘要。具體步驟如下:
(1) 產生MessageDigest對象
MessageDigest m=MessageDigest.getInstance("MD5");
分析:和2.2.1小節的KeyGenerator類一樣。MessageDigest類也是一個工廠類,其構造器是受保護的,不允許直接使用new MessageDigist( )來建立對象,而必須通過其靜態方法getInstance( )產生MessageDigest對象。其中傳入的參數指定計算訊息摘要所使用的演算法,常用的有"MD5","SHA"等。若對MD5演算法的細節感興趣可參考http://www.ietf.org/rfc/rfc1321.txt。
(2) 傳入需要計算的字串
m.update(x.getBytes("UTF8" ));
分析:x為需要計算的字串,update傳入的參數是位元組類型或位元組類型數組,對於字串,需要先使用getBytes( )方法產生字串數組。
(3) 計算訊息摘要
byte s[ ]=m.digest( );
分析:執行MessageDigest對象的digest( )方法完成計算,計算的結果通過位元組類型的數組返回。
(4) 處理計算結果
必要的話可以使用如下代碼將計算結果s轉換為字串。
String result="";for (int i=0; i<s.length; i++){ result+=Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6); }
import java.security.*;public class DigestPass{ public static void main(String[ ] args) throws Exception{ String x = getString(args[0]); MessageDigest m=MessageDigest.getInstance("MD5"); m.update(x.getBytes("UTF8")); byte[] s = getDigest(m); String result=""; for (int i=0; i<s.length; i++){ result+= getString(s[i]).substring(6); } System.out.println(result); } private static String getString(byte b) { return Integer.toHexString((0x000000ff & b) | 0xffffff00); } private static byte[] getDigest(MessageDigest m) { return m.digest(); } private static String getString(String arg) { return arg; }}
碼雲連結
20165104-JAVA第三次實驗