这是我和教授的模拟测试,我在用Java编写它时遇到了困难。
这就是问题所在:
是一个ADT,用于管理课程中的学生集合。你可以假设任何课程的学生人数都不超过100人。学生的记录由ID (String)、name (String)和GPA (double)组成。学生身份证没有重复,但有可能有两个或两个以上同名和/或GPA的学生。
创建一个新类型的StudentCollection (它相当于Java中的一个类)。除了构造函数之外,您的StudentCollection类型必须支持以下3种公共操作(尽管可以根据需要添加额外的私有操作,但它们的范围必须是私有的)
无效addStudent(学生性病):添加一个新的学生性病到您的集合。如果您的集合中有一个具有与std相同的ID的学生,则什么也不做。
学生searchByName(字符串名):搜索学生集合并返回其名称完全包含名称的任何学生(区分大小写)。例如:"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对象并在主方法(客户端代码)中使用它。客户端代码必须调用上述3种公共方法一次或多次。
对于此问题,不允许使用Java集合框架类。必须将解决此问题的代码存储在单个文件StudentCollection.java中。
我在这里选择的ADT已经设定好了。由于指令不允许我使用Java框架,所以我必须手动实现所有函数。
但问题是:对于第一个函数,这个问题要求我编写void addStudent(Student std)
,在实现集合ADT时,我不能将用户定义的数据类型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);
}
}
发布于 2021-10-24 02:59:14
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;
}
}
}
https://stackoverflow.com/questions/69693385
复制相似问题