學號 2018-2019-20175212 實驗一 《Java開發環境的熟悉》

學號 2018-2019-20175212 實驗一 《Java開發環境的熟悉》

1、實驗內容及步驟

1.使用JDK編譯、運行簡單的Java程序

  • mkdir 20175212exp1建立20175212epx1目錄
  • cd 20175212exp1 進入20175212exp1目錄
  • 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

2.使用IDEA調試Java程序

  • 設置斷點 (以下圖)
    輸入圖片說明算法

  • 單步運行
    step into(F7)windows

    step over(F8)數組

  • 從一個斷點到另外一個斷點 Resume(F9)編輯器

  • 設置條件斷點(以下圖)ide

輸入圖片說明

  • 設置臨時斷點(以下圖)
    輸入圖片說明

3.練習

實驗題目: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

  1. 添加學生添加學生
  2. 打印成績單打印成績單
  3. 添加學生添加學生
  4. 刪除學生刪除學生
  5. 查詢學生查詢學生
  6. 統計平均,最值統計平均,最值

  7. 按成績排序按成績排序
  8. 退出程序退出程序

異常狀況(當且不侷限於 學號、成績輸入字符,名字輸入數字時):
異常

用IDEA調試

調試

2、實驗中遇到的問題

  • 問題一: 因爲練習題目中所需構建的方法較多,難度也各不相同,但因沒有主類沒法進行分佈編譯,致使心態略炸。
  • 解決辦法:利用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%
相關文章
相關標籤/搜索