这是我教授给我的模拟考试,我在用Java写它时遇到了麻烦。
问题是:
需要一个ADT来管理课程中的学生集合。你可以假设每门课的学生人数不超过100人。一个学生的记录由ID(字符串)、姓名(字符串)和GPA组成(双)。学生证没有重复,但这是可能的有两个或两个以上的学生具有相同的名字和/或GPA。
创建一个新的类型StudentCollection(它相当于Java)。除了构造函数,你的StudentCollection类型必须支持以下3个公共操作(随时添加其他根据需要进行私有操作——但它们的作用域必须是私有的)
void addStudent(Student std):添加一个新的学生std到你的收集。是否有学生与性病有相同的ID在你的
Student searchByName(String name):查询学生集合和返回任何名字完全包含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。如果没有
返回-1创建一个StudentCollection对象并在main方法中使用它(客户代码)。您的客户端代码必须调用上述所有3个public方法一次或多次。
你不允许使用Java集合框架类这个问题。此问题的代码必须存储在单个文件StudentCollection.java。
这里我选择的ADT是Set。由于指令不允许我使用Java集合框架,我必须手动实现所有的功能。
但问题是:对于第一个函数,问题要求我写void addStudent(Student std)
,当实现Set ADT时,我不能传递用户定义的数据类型Student
到函数中,我做了一些研究,我们必须传递一个Set参数而不是用户定义的数据类型。下面是Student类的代码:
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
类,那么在Student
类中必须有一些getters and setters
。但是这个问题限制了要实现的公共函数的数量,除了上面三个指定函数之外的所有函数都必须是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;
}
}
}