首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将用户定义的数据类型添加到集合中?

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

Stack Overflow用户
提问于 2021-10-24 02:08:45
回答 1查看 573关注 0票数 0

这是我和教授的模拟测试,我在用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传递到函数中,我已经做了一些研究,我们必须输入一个集合参数,而不是用户定义的数据类型。这是班级学生的代码:

代码语言:javascript
运行
复制
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呢?有可能吗?

总体问题是:如何将用户定义的数据类型添加到集合中?对不起,如果我的解释还不清楚的话。如果你还有任何问题,请回答这个问题。

下面是我一直在编写的代码:

代码语言:javascript
运行
复制
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);
       
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-24 02:59:14

Student类必须是公共的,带有公共getter。否则,您无法创建一个Student实例来添加一个学生。

我继续编写了addStudent方法。我把剩下的代码留给你完成。

您需要查看类注释来验证,但这就是我开始编写StudentCollection类的方法。除了main方法之外,没有静态字段或方法。

代码语言:javascript
运行
复制
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;
        }
        
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69693385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档