-1

我有一个数组列表:

ArrayList<Student> studentList = new ArrayList<Student>();

它由一个文本文件填充,每个对象包含五条信息。

其中一条信息是“等级”。我想打印特定年级的所有学生。我当前的方法仅显示年级中学生的第一个实例。用“[]”围绕那个。

public ArrayList<Student> studentInGrade(String category) {
    ArrayList<Student> gradeCategory = new ArrayList<Student>();
    for (Student stu : studentList ) {
        if (stu.GetCategory().toUpperCase().contains(category.toUpperCase())) {
            System.out.println("Found");
            gradeCategory .add(stu );
            return gradeCategory ;
        }
    }

    System.out.println("No Category Found");
    return null;
}

例子:

我想看看所有“初级”的学生。

示例输入:

Johnny Johns
Computer Science
Junior
21
In-State
Asheley Ashers
Nursing
Sophomore
20
In-State
Andrew Anders
Basket Weaving
Graduate Student
18
Out-State
Morgan Freeman
Theater
Junior
21
In-State

我要输出的内容:

Johnny Johns
Computer Science
Junior
21
In-State
Morgan Freeman
Theater
Junior
21
In-State

目前输出什么:

[Johnny Johns
Computer Science
Junior
21
In-State]
4

3 回答 3

4

当您返回时,这会破坏您的 for 循环。为了获得所有学生,您必须遍历整个列表并在之后返回结果。

尝试将其放在循环之后:

public ArrayList<Student> studentInGrade(String category) {
    ArrayList<Student> gradeCategory = new ArrayList<Student>();
    for (DVD stu : studentList ) {
        if (stu.GetCategory().toUpperCase().contains(category.toUpperCase())) {
            System.out.println("Found");
            gradeCategory .add(dvdEntry);
        }
    }
    return gradeCategory;
}
于 2013-04-07T02:52:24.773 回答
1

您似乎遗漏了很多相关代码。但是,潜在的问题似乎是您在找到一个匹配项后立即返回,而不是收集所有匹配项。只需将您的回报移到循环之外:

ArrayList<Student> gradeCategory = new ArrayList<Student>();
for (DVD stu : studentList ) {
    if (stu.GetCategory().toUpperCase().contains(category.toUpperCase())) {
        System.out.println("Found");
        gradeCategory .add(dvdEntry);
    }
}

return catDVD;
于 2013-04-07T02:52:39.237 回答
1

returnin 循环结束了方法、use或breakincontinue循环。

public ArrayList<Student> studentInGrade(String category) {
  ArrayList<Student> gradeCategory = new ArrayList<Student>();
  for (Student stu : studentList ) {
    if (stu.GetCategory().toUpperCase().contains(category.toUpperCase())) {
      System.out.println("Found");
      gradeCategory .add(stu );
    }
  }
  if (gradeCategory.size() > 0)
    return gradeCategory;
  else {
    System.out.println("No Category Found");
    return null;
  }
}
于 2013-04-07T02:58:12.457 回答