这是我教授的模拟测试,我在用 Java 编写它时遇到了麻烦。
这是问题:
需要一个 ADT 来管理课程中的学生集合。您可以假设任何课程的学生不超过 100 人。学生的记录由 ID(字符串)、姓名(字符串)和 GPA(双精度)组成。学生 ID 没有重复,但可以有两个或多个同名和/或 GPA 的学生。
创建一个新类型 StudentCollection(它相当于 Java 中的一个类)。除构造函数外,您的 StudentCollection 类型必须支持以下 3 个公共操作(根据需要随意添加其他私有操作 - 但它们的范围必须是私有的)
void addStudent(Student std):将新的学生标准添加到您的收藏中。如果您的收藏中已经有一个学生的 ID 与 std 相同,则什么也不做。
Student searchByName(String name):搜索学生集合并返回任何名称完全包含名称的学生(区分大小写)。示例:“ABC”完全包含“ABC”;“ABC”完全包含“A”;“ABC”完全包含“C”,“ABC DEF”完全包含“C D”;“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 集合框架类来解决此问题。您解决此问题的代码必须存储在单个文件 StudentCollection.java 中。
我在这里选择的 ADT 是 Set。由于该指令不允许我使用 Java 集合框架,我必须手动实现所有功能。
但问题是:对于第一个函数,问题要求我写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,那么类中必须有一些。但是问题限制了要实现的公共功能的数量,并且除了上面三个指定功能之外的所有功能都必须是. getter 和 setter 怎么可能呢?可能吗?getters and settersStudentprivateprivate
总体问题是:如何将用户定义的数据类型添加到集合中?对不起,如果我的解释不清楚。如果您有任何其他问题,请回复此问题。
这是我一直在处理的代码:
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);
}
}