当前位置: 首页 > 知识库问答 >
问题:

访问arraylist of arraylist of arraylist的元素?

杜元明
2023-03-14

我是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;
  }
}

然后是获取地址、月份、年份和等级的方法。然后我有一个类,它是学生对象的数组列表:

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

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

这个类包括添加学生对象、列出类中的所有学生(ListallStudentsInClass)的方法,该类返回学生的ArrayList、查找类中成绩最高的学生(getHighestGradeStudent)以及成绩高于一定数量的学生的列表。最后是班级学校,它是教室的一个列表:

public class School
{
 private ArrayList<Classroom> school;

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

这包括添加类对象的方法,还应该包括返回有史以来成绩最高的学生以及所有班级成绩高于某个班级的学生列表的方法。但是,我只能通过添加的第一个类获得迭代的方法!以下是迄今为止GetHighestGrade StudentEver的代码:

    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;
     }

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

共有2个答案

陆星文
2023-03-14

正如我理解你的问题,你已经有了一个函数Classroom.getHighestGrade学生(),它给你这个类中最好的学生。您还可以获得给定学生的成绩,因为学生对象包含. finalLevel

你想在学校的所有教室里循环,找到成绩最高的学生。

所以你有了for循环,它在教室里迭代。对于每个教室,你都会得到一些任意的学生的最终分数:

int highestGrade = school.get(i).listAllStudentsInClassroom().get(i).getFinalGrade();
                                                                  ^

这可能不是你想要的。相反,你想要教室里最好的学生的成绩。为此,你应该使用

int highestGrade = school.get(i).getHighestGradeStudent().getFinalGrade();

(如果我的假设是错误的,并且您没有给定教室的函数getHighestGradeStudent(),那么您需要循环查看listallstudentsinsintoolk()(或者存储该列表排序))

然后,如果当前教室中的最佳学生比您以前在s中的好,您可以通过更新存储的最佳学生s继续您的代码
但请确保使用highestGradehighestValue,而不是两者都使用。就您的代码而言,我看不到任何地方定义了最高值。

请注意,如果只搜索一次给定类中最好的学生,则可以使此代码更高效。我愿意

Student bestOfClassroom = school.get(i).getHighestGradeStudent();
int highestGrade = bestOfClassroom.getFinalGrade();

因此,您已经让您的学生存储在s中,只需执行s=Best OfClassroom,而不是再次搜索整个列表。
但这是一个优化,不应该与程序的正确性相关。

梁丘凯定
2023-03-14

如果你已经可以得到一个班级中得分最高的学生,那么你可以得到所有班级的分数,并从所有班级中找出最高的分数。

// 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;

或者,使用

return school.stream().flatMap(x -> x.getListOfStudents().stream())
                      .sorted(Comparator.comparing(Student::getFinalGrade).reversed())
                      .findFirst().orElse(null);
 类似资料:
  • 问题内容: 我正在从URL获取天气信息。 我得到的是: 如何访问所需的任何元素? 如果我这样做:我收到错误消息: 字符串索引必须是整数,而不是str。 问题答案: 您从url中获得的是一个json字符串。而且您不能直接用索引解析它。您应该将其转换为dict ,然后可以使用index对其进行解析。 与其使用中间方式将其保存到内存,然后将其读取为,不如直接从文件中加载它:

  • [ ]操作符可以对向量进行读和写,这和apstring访问字符类似。同样和apstring一样,索引从0开始,count[ 0 ]指的是向量中的第0个元素,count[ 1 ]指的是向量中的第1个元素。[ ]操作符可以应用在任何表达式中。 count[0] = 7; count[1] = count[0] * 2; count[2]++; count[3] -= 60; 所有的这些语句都是合法的

  • 我正在尝试访问HTML代码中特定的元素。 定义元素的代码部分如下所示 。 在下面的第二行代码之后,我尝试声明表达式和,它们都返回java.lang.String类型的“oddrow cellcont” 但是,我尝试了下面的代码片段,它不能工作,因为循环中的条件返回false。我还尝试使用和、、、...以所有可能的组合使用if条件。 我肯定被困住了;我需要帮助。

  • 任何支持style 特性的HTML 元素在JavaScript 中都有一个对应的style 属性。这个style 对象是CSSStyleDeclaration 的实例,包含着通过HTML 的style 特性指定的所有样式信息,但不包含与外部样式表或嵌入样式表经层叠而来的样式。在style 特性中指定的任何CSS 属性都将表现为这个style 对象的相应属性。对于使用短划线(分隔不同的词汇,例如ba

  • 有没有可能用蟒蛇硒在阴影DOM中找到元素? 示例用例: 我用输入了这个

  • 问题内容: 我有一个Python,我将根据条件从中逐个删除元素。当集合只剩下1个元素时,我需要返回该元素。如何从集合中访问此元素? 一个简化的例子: 问题答案: 用途: 在您的情况下,它将是: 但是请注意,这将从集合中删除该项目。如果不希望这样做,则可以使用| : 演示:

  • 问题内容: 我是AngularJS的新手,怀疑我没有掌握一个概念。我也在使用Twitter Bootstrap,并且加载了jQuery。 工作流程:用户单击列表中的链接,“主”部分被更新,并且链接用户单击了活动类。 基本HTML标记: 在jQuery中执行此操作: 但是我无法弄清楚如何集成Angular和jQuery以完成此操作,因为我正在使用Angular从服务器获取主列表(以JSON形式)并更

  • 我可以通过以下方式访问dev中的用户名: 有没有其他方法可以通过webdriver访问ShadowDOM元素?