mkdir 20175212exp1
建立20175212epx1
目錄mkdir src
, mkdir bin
, cd src
建立子目錄並進入atom Hello.java
使用atom編輯器編寫Hello.java文件cd ..
回到上級目錄javac -d bin src/Hello.java
編譯代碼並將可執行文件產生在bin目錄中cd bin
java Hello
運行代碼實驗截圖以下
java
設置斷點 (以下圖)
算法
單步運行
step into(F7)windows
step over(F8)數組
從一個斷點到另外一個斷點 Resume(F9)編輯器
設置條件斷點(以下圖)ide
實驗題目:4. 實現學生成績管理功能(增刪改,排序,查找),並進行測試(正常狀況,異常狀況,邊界狀況)。學習
代碼爲:測試
package student.score.manage; public class Score { String num; String name; double score; public Score(){ } public void setNum(String num) { this.num = num; } public void setName(String name) { this.name = name; } public void setScore(double score) { this.score = score; } }
package student.score.manage; import java.util.Scanner; public class ScoreList { int maxLength = 100; int length = 0; Score[] data = new Score[maxLength]; Scanner input = new Scanner(System.in); public ScoreList() { } //添加記錄方法 public void add() { if(length < maxLength) { data[length] = new Score(); System.out.print("請輸入學生的學號: "); data[length].setNum(input.next()); System.out.print("請輸入學生的姓名:"); data[length].setName(input.next()); System.out.print("請輸入學生的成績:"); data[length].setScore(input.nextDouble()); length++; System.out.println("添加成功!"); } else { System.out.println("添加失敗!"); } } //顯示成績單方法 public void transcript() { System.out.println("====================================="); System.out.println(" 學號 姓名 成績 "); for(int i = 0; i < length; i++) { System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score); } System.out.println("=====================================\n"); } //成績從高往低排序方法 public void sort() { Score temp = new Score(); for(int i = 1; i < length; i++) { for(int j = 0; j < length - i; j++) { if(data[j].score < data[j + 1].score) { //冒泡法排序 temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } } } //平均分、最大最小值方法 public void average() { double sum = 0.0; double max = 0.0; double min = 100.0; for(int i = 0; i < length; i++) { sum += data[i].score; max = max > data[i].score ? max : data[i].score; min = min < data[i].score ? min : data[i].score; //三目運算法 } System.out.printf("這門課的平均成績爲: %.2f\n", sum/length); System.out.println("最高分爲: " + max + "\n" + "最低分爲: " + min + "\n"); } //刪除學生記錄方法 public void delete() { System.out.print("請輸入您要刪除信息的學生的學號: "); String number1 = input.next(); int i, flag = length; for(i = 0; i < length; i++) { if(number1.equals(data[i].num)) { flag = i; break; } } if(i == length) { System.out.println("查無此人!請覈對後從新輸入 \n"); delete(); } else { for(int j = flag; j < length; j++) { data[j] = data[j + 1]; } System.out.println("刪除成功!\n"); length -= 1; //不減1會報數組越界的錯誤 } } //查詢某個學生信息方法 public void inquire() { System.out.print("請輸入您要查詢成績的學生的學號:"); String number2 = input.next(); int i; for(i = 0; i < length; i++) { if(number2.equals(data[i].num)) { System.out.println("===================================="); System.out.println(" 學號 姓名 成績 "); System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score); System.out.println("====================================\n"); break; } } if(i == length) { System.out.println("查無此人!請覈對後從新輸入學號 \n"); inquire(); } } //修改學生信息方法 public void recompose() { System.out.print("請輸入您要修改信息的學生的學號:"); String number3 = input.next(); int i; for(i = 0; i < length; i++) { if(number3.equals(data[i].num)) { System.out.println("請輸入該學生新的學號,姓名和成績:"); data[i].setNum(input.next()); data[i].setName(input.next()); data[i].setScore(input.nextDouble()); System.out.println("修改爲功!\n"); break; } } if(i == length) { System.out.println("查無此人!請覈對後從新輸入學號\n"); recompose(); } } }
package student.score.manage; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); String choice = "1"; ScoreList studentScoreList = new ScoreList(); System.out.println("**********學生成績管理系統********"); while(choice.equals("0") == false) { System.out.println("1.查看學生成績單"); System.out.println("2.添加學生成績記錄"); System.out.println("3.修改學生成績記錄"); System.out.println("4.刪除學生成績記錄"); System.out.println("5.查看某位學生成績記錄"); System.out.println("6.統計這門課平均分、最高分和最低分"); System.out.println("7.按成績從高往低排序,並輸出"); System.out.println("0.退出程序"); System.out.print("Enter your choice: "); choice = input.next(); switch(choice) { case "0": System.out.println("謝謝您的使用,歡迎下次光臨!\n" + "**********按任意鍵結束程序**********"); break; case "1": studentScoreList.transcript(); System.out.println("請問您還須要什麼服務?\n"); break; case "2": int i = 1; do { studentScoreList.add(); System.out.println("\n是否繼續添加?" + "\n" + "0.否" + "\n" + "1.是"); i = input.nextInt(); }while(i == 1); System.out.println("請問您還須要什麼服務?\n"); break; case "3": studentScoreList.recompose(); System.out.println("請問您還須要什麼服務?\n"); break; case "4": studentScoreList.delete(); System.out.println("請問您還須要什麼服務?\n"); break; case "5": studentScoreList.inquire(); System.out.println("請問您還須要什麼服務?\n"); break; case "6": studentScoreList.average(); System.out.println("請問您還須要什麼服務?\n"); break; case "7": studentScoreList.sort(); studentScoreList.transcript(); System.out.println("請問您還須要什麼服務?\n"); break; default: System.out.println("Invalid input! Please enter again."); break; } } } }
運行結果截圖:ui
正常狀況:this
統計平均,最值
退出程序
異常狀況(當且不侷限於 學號、成績輸入字符,名字輸入數字時):
解決辦法:利用IDAE的優勢,利用軟件的紅波浪提醒,檢查語法錯誤和遺漏,待完成主類以後再經過debug對程序進行調試並尋找邏輯錯誤。
package student.score.manage;
,但一直提示語法錯誤。解決辦法:爲使成功編譯運行,首先使用粗暴的辦法,直接在windows目錄下創建文件夾,以下圖
但回想起調試第四章代碼,學習包時,編譯時系統自動幫我建了文件夾。通過借鑑學習得知,緣由爲曾經使用的
javac -d
的編譯方式 帶有建立包的文件夾的功能 。
在類與程序的基本結構中,能夠說java程序有一個個類所構成,各種均爲主類所服務。另外的,如練習題四中,若一個類可在其餘各種中使用,則能夠選擇帶包編譯,方便快捷。
因爲我抽到的題目在代碼量上對我而言有些許困難,免不了有借鑑學習之處,也理解了一些還未看到的內容。所以我認爲不管使結對學習寫代碼,或是在網上 理解的 借鑑學習,都能對自身起到鞭策追趕的做用。
IDEA對於語法錯誤與遺漏有着鮮明的提示(紅色下波浪),但程序中的邏輯錯誤肉眼很難辨別,於是掌握使用強大的調試功能顯得尤其重要。
步驟 | 耗時 | 百分比 |
---|---|---|
需求分析 | 10min | 6.7% |
設計 | 20min | 13.3% |
代碼實現 | 90min | 60% |
測試 | 10min | 6.7% |
分析總結 | 20min | 13.3% |