20155218 《Java程式設計》實驗三(Java面向對象程式設計)實驗報告
一、實驗内容及步驟
(一)編碼标準
在IDEA中使用工具(Code->Reformate Code)把代碼重新格式化。
(二)在碼雲上把自己的學習搭檔加入自己的項目中,确認搭檔的項目加入自己後,下載下傳搭檔實驗二的Complex代碼,加入不少于三個JUnit單元測試用例
要求:送出搭檔項目git log的截圖,包含上面git commit的資訊,并加上自己的學号水印資訊。
(三)完成重構内容
要求:下載下傳搭檔的代碼,至少進行三項重構,送出重構後代碼的截圖,加上自己的學号水印。送出搭檔的碼雲項目連結。
搭檔原代碼截圖:
原代碼在該用類的地方使用了結構體并且每次列印角色資訊都這麼寫代碼違反了DRY原則,造成代碼重複。
修改之後
(四)以結對的方式完成Java密碼學相關内容的學習
-凱撒密碼:
import java.util.Scanner;
public class Caeser {
public static void main(String[] args) {
System.out.println("[A 加密][J 解密],Please Choose One");
Scanner c=new Scanner(System.in);//建立Scanner鍵盤輸入對象
String s1=c.nextLine();//擷取本行的字元串
if(s1.equalsIgnoreCase("A")){
System.out.println("請輸入明文:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println("請輸入密鑰:");
Scanner sc1=new Scanner(System.in);
int key=sc1.nextInt();//将下一個輸入項轉換成int類型
Encryption(s, key);
}else if(s1.equalsIgnoreCase("J")){
System.out.println("請輸入密文:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println("請輸入密鑰:");
Scanner sc1=new Scanner(System.in);
int key=sc1.nextInt();//将下一個輸入項轉換成int類型
Decrypt(s, key);//調用解密方法
}
}
public static void Encryption(String str,int k){//加密
String string="";
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if(c>='a'&&c<='z'){//如果字元串中的某個字元是小寫字母
c+=k%26;//移動key%26;
if(c
c+=26;
if(c>'z')
c-=26;
}else if(c>='A'&&c<='Z'){//如果字元串中的某個字元是大寫字母
c+=k%26;//移動key%26;
if(c
c+=26;
if(c>'Z')
c-=26;
}
string+=c;//将加密後的字元串連成字元串
}
System.out.println(str+" 加密後為: "+string);
}
public static void Decrypt(String str,int n){//解密
int k=Integer.parseInt("-"+n);
String string="";
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if(c>='a'&&c<='z'){//如果字元串中的某個字元是小寫字母
c+=k%26;//移動key%26;
if(c
c+=26;
if(c>'z')
c-=26;
}else if(c>='A'&&c<='Z'){//如果字元串中的某個字元是大寫字母
c+=k%26;//移動key%26;
if(c
c+=26;
if(c>'Z')
c-=26;
}
string+=c;//将解密後的字元串連成字元串
}
System.out.println(str+" 加密後為: "+string);
}
}
-RSA密碼:
三、總結與分析
(一)遇到的問題及解決方案:
問題一:
做該實驗的時候“*”出現了問題。
解決方案:因為“”表示通配符,不會運作後面的語句。将“”換成“x”即可。
問題二:
( 二)PSP
步驟
耗時
百分比)
需求分析
10min
11.11%
設計
15min
16.66%
代碼實作
40min
44.44%
測試
5min
5.55%
分析總結
20min
22.22%