20145120 《Java程序設計》實驗一實驗報告
實驗名稱:Java開發環境的熟悉
實驗目的與要求:
1.使用JDK編譯、運行簡單的Java程序;(第1周學習總結)
2.編輯、編譯、運行、調試Java程序。
實驗內容、步驟
我的實驗環境是Windows+IDEA
開始調試程序
只要想要設置斷點的地方的左邊左鍵點一下就可以設置斷點了,右擊斷點可以設置成條件斷點

step over和step into
resume
watch窗口,按綠色的加號可以添加變量,按紅色的減號可以把已添加的變量刪掉,在watch窗口可以看到變量目前的值
程序代碼里也能看到變量值
教材學習中的問題和解決過程
因為我是用WINDOWS+IDEA,所以實驗一博客很多部分我都不能直接套用,代碼調試需要的各個按鈕都要要自己摸索,把鼠標移上去,等提示信息顯示出來,再比較老師的截圖里的內容,才能確定這個按鈕的作用。
設條件斷點的時候把i==3和i=3搞錯了
代碼調試中的問題和解決過程
我是20號,20mod5+1=1,做的是凱撒密碼的實現。
1.一開始我以為應該有個scanner.nextChar的方法,然而,其實並沒有。后來百度了一下,找到了toCharArray(),toCharArray()可以把字符串轉化成字符數組。
Scanner scanner = new Scanner(System.in);
char[] m = new char[100];
char[] c = new char[100];
System.out.println("請輸入明文:"); //輸入明文
String str=scanner.nextLine();
char[] chars=str.toCharArray();
for (int i=0;i<chars.length;i++){
m[i]=chars[i];
}
因為一開始定義好了明文和密文的字符串,以為有個nextChar,所以這樣寫了,后來才想到可以直接把轉出來的字符數組定成m就好
2.加密的部分我開始是這樣寫的
for (int i=0;i<100;i++){ //加密
if ((m[i]>='a'&&m[i]<='w')||(m[i]>='A'&&m[i]<='W')) {
c[i] = (char) (m[i] + 3);
}
else if ((m[i]>='x'&&m[i]<='z')||(m[i]>='X'&&m[i]<='Z')){
c[i] = (char) (m[i] + 3-26);
}
else {
c[i]=m[i];
}
}
后來發現程序不能運行,調試之后發現,如果明文小於100,后面都是Null,不可能再+3,所以出錯了
3.后來我想嘗試讓可以自己輸入密鑰
System.out.println("請輸入密鑰:"); //取得密鑰
int key = scanner.nextInt()%26;
System.out.println("請輸入明文:"); //取得明文
String str=scanner.nextLine();
發現輸入密鑰之后程序直接走完了,瞬間有種似曾相識的感覺,於是我試了下在中間加行scanner.nextLine();,果然成功了。
最終程序和截圖
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[] c = new char[100];
System.out.println("請輸入密鑰:"); //取得密鑰
int key = scanner.nextInt()%26;
scanner.nextLine();
System.out.println("請輸入明文:"); //取得明文
String str=scanner.nextLine();
char[] m=str.toCharArray();
if (m.length>=100){
System.out.println("輸入過長,請控制在100英文字符以內");
}
for (int i=0;i<m.length;i++){ //加密
if ((m[i]>='a'&& m[i]<='z')||(m[i]>='A'&& m[i]<='Z')) {
c[i] = (char) (m[i]+key);
if (key>0){
if ((c[i]<'a'&& c[i]>'Z')||c[i]>'z'){
c[i] -= 26;
}
}
else{
if ((c[i]<'a'&& c[i]>'Z')||c[i]<'A'){
c[i] += 26;
}
}
}
else {
c[i]=m[i];
}
}
System.out.println("密文:"); //輸出密文
for (int i=0;i<m.length;i++) {
System.out.printf("%c",c[i]);
}
}
}
實驗心得與體會
這次實驗本身的算法不是很難,但是感覺編程中考驗到我的地方還是不少,例如我一直以為是有一個scanner.nextChar(),老實說我到現在都不懂為什么不弄個nextChar出來。這次實驗讓我實踐到了之前學到的很多知識,例如變量的定義,“.length”的使用,“Scanner”的使用等等,也學會了很多新知識,包括關於Scanner的一些特點,如何用IDEA調試代碼等等,獲益良多。