[英]Design a student management tool in Java
這是我教授的模擬測試,我在用 Java 編寫時遇到了麻煩。
這是問題:
需要 ADT 來管理課程中的學生集合。 您可以假設任何課程的學生都不超過 100 人。 學生的記錄由 ID(字符串)、姓名(字符串)和 GPA(雙精度)組成。 學生 ID 沒有重復,但可能有兩個或兩個以上具有相同姓名和/或 GPA 的學生。
創建一個新的 StudentCollection 類型(相當於 Java 中的一個類)。 除構造函數外,您的 StudentCollection 類型必須支持以下 3 個公共操作(可以根據需要隨意添加其他私有操作 - 但它們的作用域必須是私有的)
void addStudent(Student std):將新的學生標准添加到您的收藏中。 如果您的收藏中已有與 std 具有相同 ID 的學生,請不要執行任何操作。
學生 searchByName(String name):搜索學生集合,返回姓名中完全包含姓名的任何學生(區分大小寫)。 示例:“ABC”完全包含“ABC”; “ABC”完全包含“A”; “ABC”完全包含“C”,“ABC DEF”完全包含“CD”; “ABC”不完全包含“CB”; “ABC”不完全包含“abc”。 如果有多個匹配的學生,您的方法可以返回任何學生。 如果沒有匹配的學生,則返回 null。 int rankStudent(String sID):返回ID為sID的學生在該集合中的排名。 排名是根據學生的 GPA 完成的。 GPA 最高的學生的排名為 1。在此示例中,假設有 4 個 GPA 值 [9.0, 8.5, 7.0, 8.5]。 GPA = 9.0 的學生排名為 1,GPA = 8.5 的學生排名為 2(有 2 個學生的排名相同為 2),而 GPA = 7.0 的學生排名為 4。如果沒有找到具有所提供 sID 的學生,則返回 -1。
創建一個 StudentCollection 對象並在 main 方法(客戶端代碼)中使用它。 您的客戶端代碼必須一次或多次調用上述所有 3 個公共方法。
不允許您使用 Java Collection Framework 類解決此問題。 此問題的代碼必須存儲在單個文件 StudentCollection.java 中。
我在這里選擇的 ADT 是 Set。 由於指令不允許我使用Java Collection Framework,我必須手動實現所有功能。
但問題是:對於第一個函數,問題要求我編寫void addStudent(Student std)
,在實現 Set ADT 時,我無法將用戶定義的數據類型Student
傳遞到函數中,我已經做了一些研究和我們必須傳入 Set 參數而不是用戶定義的數據類型。 這是學生類的代碼:
static class Student {
private String ID;
private String name;
private double GPA;
Student(String ID, String name, double GPA) {
this.ID = ID;
this.name = name;
this.GPA = GPA;
}
}
讓我們說,我們把在Student
類,那么就必須要一些getters and setters
的內部Student
類。 但是這個問題限制了要實現的公共函數的數量,除了上面三個指定函數之外的所有函數都必須是private
。 getter 和 setter 如何是private
? 是否可以?
總體問題是:如何將用戶定義的數據類型添加到集合中? 如果我的解釋不清楚,我很抱歉。 如果您有任何其他問題,請回復此問題。
這是我一直在研究的代碼:
import java.util.HashSet;
import java.util.Set;
public class StudentCollection {
static Set<Student> manage = new HashSet<>();
static class Student {
private String ID;
private String name;
private double GPA;
Student(String ID, String name, double GPA) {
this.ID = ID;
this.name = name;
this.GPA = GPA;
}
}
public static void addStudent(Student std) {
manage.add(std);
}
// public static Student searchByName(String name) {
//
// }
//
// public static int rankStudent(String sID) {
//
// }
public static void main(String[] args) {
Student std = new Student("s387", "nam", 3.7);
addStudent(std);
}
}
Student
類必須是公開的,有公開的 getter。 否則,您無法創建Student
實例來添加學生。
我繼續編寫了addStudent
方法。 我將剩下的代碼留給你完成。
您必須查看課堂筆記以進行驗證,但這就是我開始編寫StudentCollection
類的方式。 除了main
方法之外,沒有靜態字段或方法。
public class StudentCollection {
public static void main(String[] args) {
StudentCollection sc = new StudentCollection();
sc.addStudent(sc.new Student("10001", "George", 9.0));
}
private int studentLength;
private Student[] students;
public StudentCollection() {
this.studentLength = 0;
this.students = new Student[100];
}
public void addStudent(Student student) {
for (int index = 0; index < studentLength; index++) {
if (student.getSID().equals(students[index].getSID())) {
return;
}
}
students[studentLength++] = student;
}
public Student searchByName(String name) {
}
public int rankStudent(String sID) {
}
public class Student {
private final double gpa;
private final String sID, name;
public Student(String sID, String name, double gpa) {
this.sID = sID;
this.name = name;
this.gpa = gpa;
}
public double getGpa() {
return gpa;
}
public String getSID() {
return sID;
}
public String getName() {
return name;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.