访问arraylist的arraylist的arraylist的元素?
Access elements of arraylist of arraylist of arraylist?
我是 Java 的新手,我目前正在将 BlueJ 用于一个项目。我在访问此类对象的 ArrayList 的 ArrayList 中的对象时遇到问题。假设我有一个 Student 对象:
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 Class,这是一个 Student 对象的 ArralyList:
public class Classroom
{
private String classroom;
private ArrayList<Student> listOfStudents;
public Classroom (String classroom)
{
this.classroom = classroom;
listOfStudents = new ArrayList<Student>();
}
}
而这个 class 包括添加 Student 对象的方法,列出 class(listAllStudentsInClassroom)中的所有学生,其中 return 是一个 ArrayList Student,在class(getHighestGradeStudent)中找到成绩最高的Student,得到成绩高于一定数量的学生列表。
最后是class School,它是Classroom:
的ArrayList
public class School
{
private ArrayList<Classroom> school;
public School()
{
school = new ArrayList<Classroom>();
}
}
这包括添加 class 对象的方法,它应该包括 return 有史以来成绩最高的学生的方法,以及来自所有 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;
}
这只是 return 添加到学校的第一个 class 房间对象中成绩最高的学生。我究竟做错了什么?抱歉问题太长了,我尽量说清楚了!
据我了解你的问题,你已经有一个函数 Classroom.getHighestGradeStudent()
可以让你成为那个 class 中最好的学生。您还可以获取给定学生的成绩,因为 Student 对象包含 .finalGrade
.
您想遍历学校所有 class 房间,找到成绩最高的学生。
所以你有 for 循环,它遍历 class 房间。对于每个 class 房间,您都会得到一些任意学生的期末成绩:
int highestGrade = school.get(i).listAllStudentsInClassroom().get(i).getFinalGrade();
^
这可能不是您想要的。相反,您想要那个 class 房间里最好的学生的成绩。为此,您应该改用
int highestGrade = school.get(i).getHighestGradeStudent().getFinalGrade();
(如果我的假设是错误的并且您没有给定 class 房间的函数 getHighestGradeStudent()
,您需要循环 listAllStudentsInClassroom()
的结果(或存储该列表已排序))
然后,如果当前 class 房间的最佳学生比您之前拥有的更好,则您可以通过更新存储的最佳学生 s
继续您的代码在 s
.
但请确保您使用 highestGrade
或 highestValue
,而不是同时使用它们。就您的代码而言,我没有在任何地方看到 highestValue
定义。
请注意,如果您只在给定的 class 一次 中搜索最好的学生,则可以提高此代码的效率。我会做
Student bestOfClassroom = school.get(i).getHighestGradeStudent();
int highestGrade = bestOfClassroom.getFinalGrade();
所以您已经让您的学生存储在 s
中,只需执行 s = bestOfClassroom
而不是再次搜索整个列表。
但这是一个优化,不应该与程序的 正确性 相关。
如果您已经可以在 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 的新手,我目前正在将 BlueJ 用于一个项目。我在访问此类对象的 ArrayList 的 ArrayList 中的对象时遇到问题。假设我有一个 Student 对象:
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 Class,这是一个 Student 对象的 ArralyList:
public class Classroom
{
private String classroom;
private ArrayList<Student> listOfStudents;
public Classroom (String classroom)
{
this.classroom = classroom;
listOfStudents = new ArrayList<Student>();
}
}
而这个 class 包括添加 Student 对象的方法,列出 class(listAllStudentsInClassroom)中的所有学生,其中 return 是一个 ArrayList Student,在class(getHighestGradeStudent)中找到成绩最高的Student,得到成绩高于一定数量的学生列表。 最后是class School,它是Classroom:
的ArrayListpublic class School
{
private ArrayList<Classroom> school;
public School()
{
school = new ArrayList<Classroom>();
}
}
这包括添加 class 对象的方法,它应该包括 return 有史以来成绩最高的学生的方法,以及来自所有 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;
}
这只是 return 添加到学校的第一个 class 房间对象中成绩最高的学生。我究竟做错了什么?抱歉问题太长了,我尽量说清楚了!
据我了解你的问题,你已经有一个函数 Classroom.getHighestGradeStudent()
可以让你成为那个 class 中最好的学生。您还可以获取给定学生的成绩,因为 Student 对象包含 .finalGrade
.
您想遍历学校所有 class 房间,找到成绩最高的学生。
所以你有 for 循环,它遍历 class 房间。对于每个 class 房间,您都会得到一些任意学生的期末成绩:
int highestGrade = school.get(i).listAllStudentsInClassroom().get(i).getFinalGrade();
^
这可能不是您想要的。相反,您想要那个 class 房间里最好的学生的成绩。为此,您应该改用
int highestGrade = school.get(i).getHighestGradeStudent().getFinalGrade();
(如果我的假设是错误的并且您没有给定 class 房间的函数 getHighestGradeStudent()
,您需要循环 listAllStudentsInClassroom()
的结果(或存储该列表已排序))
然后,如果当前 class 房间的最佳学生比您之前拥有的更好,则您可以通过更新存储的最佳学生 s
继续您的代码在 s
.
但请确保您使用 highestGrade
或 highestValue
,而不是同时使用它们。就您的代码而言,我没有在任何地方看到 highestValue
定义。
请注意,如果您只在给定的 class 一次 中搜索最好的学生,则可以提高此代码的效率。我会做
Student bestOfClassroom = school.get(i).getHighestGradeStudent();
int highestGrade = bestOfClassroom.getFinalGrade();
所以您已经让您的学生存储在 s
中,只需执行 s = bestOfClassroom
而不是再次搜索整个列表。
但这是一个优化,不应该与程序的 正确性 相关。
如果您已经可以在 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);