gpt4 book ai didi

java - 访问arraylist的arraylist的arraylist的元素?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:00 25 4
gpt4 key购买 nike

我是 Java 的新手,目前正在使用 BlueJ 进行项目。我在访问此类对象的 ArrayList 的 ArrayList 中的对象时遇到问题。假设我有一个学生对象:

public class Student
{
private String homeAddress;
private String monthBorn;
private String yearBorn;
private int;

public Student(String homeAddress, String monthBorn, String yearBorn,
int finalGrade)
{
this.homeAddress = homeAddress;
this.monthBorn = monthBorn;
this.yearBorn = yearBorn;
this.finalGrade = finalGrade;
}
}

然后是获取地址、月份、年份和年级的方法。然后我有一个类 Class,它是 Student 对象的 ArralyList:

    public class Classroom
{
private String classroom;
private ArrayList<Student> listOfStudents;

public Classroom (String classroom)
{
this.classroom = classroom;
listOfStudents = new ArrayList<Student>();
}
}

并且该类包括添加 Student 对象的方法,列出类(class)中所有学生的方法 (listAllStudentsInClassroom) 返回 Student 的 ArrayList,查找类(class)中成绩最高的学生 (getHighestGradeStudent),以及列表成绩高于一定数量的学生。最后是 School 类,它是一个 Classroom 的 ArrayList:

public class School
{
private ArrayList<Classroom> school;

public School()
{
school = new ArrayList<Classroom>();
}
}

这包括添加类(class)对象的方法,它应该包括返回有史以来最高成绩的学生的方法,以及所有类(class)成绩高于某个类(class)的学生的列表。但是,我只能获取方法来迭代仅添加的第一个类!到目前为止,这是 getHighestGradeStudentEver 的代码:

    public Student getHighestGradeStudentEver ()
{
Student s = school.get(0).getHighestGradeStudent();
int highestGrade = school.get(0).listAllStudentsInClassroom().get(0).getFinalGrade();
for(int i =1; i< school.size(); i++){
int highestGrade = school.get(i).listAllStudentsInClassroom().get(i).getFinalGrade();
if(value > (highestValue)){
highestValue = value;
s = school.get(i).getHighestGradeStudent();
}
}
return s;
}

这只会返回第一个添加到学校的教室对象中成绩最高的学生。我究竟做错了什么?很抱歉问了这么长的问题,我尽量说清楚了!

最佳答案

如果您已经可以得到类(class)中成绩最高的学生,您可以得到所有类(class)的学生,并从所有这些学生中找出最高分。

// find the highest grade in each class
ArrayList<Student> highestInEachClass = new ArrayList<>();
for (Classroom classroom : school) {
highestInEachClass.add(classroom.getHighestGradeStudent());
}

// find the highest grade overall
Student highestGradeStudent = highestInEachClass.get(0);
for (Student student : highestInEachClass) {
if (highestGradeStudent.getFinalGrade() < student.getFinalGrade()) {
highestGradeStudent = student;
}
}
return highestGradeStudent;

或者,使用Stream:

return school.stream().flatMap(x -> x.getListOfStudents().stream())
.sorted(Comparator.comparing(Student::getFinalGrade).reversed())
.findFirst().orElse(null);

关于java - 访问arraylist的arraylist的arraylist的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53248022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com