【问题标题】:Filter Student class based on enum基于枚举过滤学生类
【发布时间】:2015-12-30 15:42:38
【问题描述】:

我有一个抽象类Human 和一个派生类Student - Human 类具有名字和姓氏字段。 - Student 类有一个名为“type”的新字段,它是一个具有选项 PRIMARYSECONDARYCOLLEGE 的枚举,和平均成绩字段,即学生当年的平均成绩。

我需要帮助来定义带有枚举的Student 类。我试过这个:

public class Student extends Human {

    private int averageGrade;

    public enum TYPE {

        PRIMARY(1), SECONDARY(2), COLLEGE(3);

        private int studentType;

        TYPE(int stType) {
            studentType = stType;
        }

        public int GetStudentType() {
            return studentType;
        }

        public void SetStudentType(int value) {
            if (value != 1 || value != 2 || value != 3) {
                throw new IllegalArgumentException(" dsfss");
            }
            this.studentType = value;
        }

        public Student(String firstName, String lastName, int studentType, int averageGrade) {
            super(firstName, lastName);

            this.setAverageGrade(averageGrade);
        }

        public int getAverageGrade() {
            return averageGrade;
        }

        public void setAverageGrade(int averageGrade) {
            if (averageGrade < 2 && averageGrade > 6) {
                throw new IllegalArgumentException("Student grades are between 2 and 6 inclusive");
            }
            this.averageGrade = averageGrade;
        }


}

我还必须打印每个学生类型(PRIMARYSECONDARYCOLLEGE)中成绩最高的学生。

我不知道枚举使用哪种比较器,averageGrade 很简单,但首先我需要根据枚举类型对它们进行排序。

请帮忙!我将不胜感激。

【问题讨论】:

  • 我看不懂你的代码!你能正确缩进吗?
  • 我对代码部分进行了格式化,不过需要重新审核。

标签: java class enums compare abstract


【解决方案1】:

我认为最好在不同的文件中创建 TYPE,例如 StudentType,然后将属性添加到 Student 的类主体。然后你会有这样的东西:

public class Student {

    private String firstName, lastName;
    private Integer averageGrade;
    private StudentType studentType;

    // getters and setters

}

还有一个像这样的枚举:

public enum StudentType {
    PRIMARY, SECONDARY, COLLEGE;
}

您可以使用 compareTo(E o) 方法来比较两个枚举 (https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#compareTo(E))。 您可以使用 compareTo(Integer anotherInteger) 来比较整数 (https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#compareTo(java.lang.Integer))。

例如:

public class StudentComparator  implements Comparator<Student>{

    public int compare(Student s1, Student s2) {
        // ASC comparing on attribute studentType
        int resultType = s1.getStudentType().compareTo(s2.getStudentType());
        if (resultType == 0) {
            // DESC comparing on attribute average grade
            return s2.getAverageGrade().compareTo(s1.getAverageGrade()); 
        } 
        return resultType; 
    }

    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("A", "A", 10, StudentType.COLLEGE));
        list.add(new Student("B", "B", 1, StudentType.COLLEGE));
        list.add(new Student("C", "C", 9, StudentType.PRIMARY));
        list.add(new Student("D", "D", 7, StudentType.SECONDARY));
        list.add(new Student("E", "E", 8, StudentType.PRIMARY));


        Collections.sort(list, new StudentComparator());

        for (Student student : list) {
            System.out.println(student);
        }
    }

}

输出将是:

C C at PRIMARY: 9
E E at PRIMARY: 8
D D at SECONDARY: 7
A A at COLLEGE: 10
B B at COLLEGE: 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多