如何将用户定义的数据类型添加到集合中?



这是我教授给我的模拟考试,我在用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;
}

}
}

最新更新