使用另一个数组列表java的对象从一个数组列表中获取值

时间:2014-04-13 16:39:52

标签: java object arraylist

我有3个ArrayLists。 1)学生(身份证,姓名,计划) 2)课程(ID,姓名,学分) 3)学生课程(StudentId,CourseID)

我通过传递StudentID并使用他/她的名字注册的课程从StudentCourses搜索。 我的StudentCourse ArrayLIst有这样的对象

49(学生证) CS233(课程编号)

49(学生证) CS231(课程编号)

当用户搜索学生时,请说我正在搜索Johnna,注册号为49。 结果是

Reg ID:49 姓名:约翰娜 课程:BSCS 注册课程: CS233 CS231

哪个好。但是,我真正需要做的是使用出现在Johnna搜索信息中的课程ID获取课程名称。 Course ArrayList如下所示:

CS233 OOP BSCS

CS231 算法 BSCS

我试过这段代码,但它似乎没有用。它不断给出垃圾值,或只打印所有课程名称,直到出现空例外:

if (myStudent == null) {
    System.out.print("No Record Was Found");
} else {
    System.out.print("Student ID: " + myStudent.getID() + "\nFull Name: " + myStudent.getName() + "\nProgram: " + myStudent.getProgram() +

    "\nTotal Credit Hours: " + (Integer.parseInt(myStudent.getTotalCreds())) * 3420 + "Rs" + "\nCourses Registered:\n");
}
for (int i = 0; i < studCourseList.size(); i++) {
    if (studCourseList.get(i).getSid().equals(ID)) {

        System.out.print("- " + studCourseList.get(i).getCid() + "\n");
        for (int j = 0; j < CoursesList.size(); j++) {
        if(CoursesList.get(i).getID().equals(studCourseList.get(i).getCid())){
                System.out.print("- " + CoursesList.get(i).getName() + "\n");
                break;
            }

        }

    }

}

上半部分带有学生信息,第一个循环用于针对学生ID注册的课程,第二个循环不起作用。 请注意,所有对象都在不同的行上。如果你没有得到我想要提出的问题,请不要贬低。请问。我会再试一次解释。

3 个答案:

答案 0 :(得分:1)

我建议您使用Map代替List,在这种情况下,Id被视为关键字,POJO视为其值。

  

HashMap在搜索中比List更快。


示例代码:

class Student {
    private String id;
    private String name;
    private String program;
    // getter setter
}

class Course {
    private String id;
    private String name;
    private int creditHours;
    // getter setter
}

class StudentCourses {
    private String studentId;
    private String courseId;
    // getter setter
}

Map<String, Student> students = new HashMap<String, Student>();
Map<String, Course> courses = new HashMap<String, Course>();

答案 1 :(得分:1)

在你的嵌套for循环中,使用'j'作为计数器,但在该循环中你引用'i'。

for (int j = 0;j<CoursesList.size(); j++){
    if (CoursesList.get(i).getID().equals(studCourseList.get(i).getCid()));
    {
        System.out.print("- " + CoursesList.get(i).getName() + "\n");
        break;
    }

看起来像是

.equals(studCourseList.get(i).getCid()

应该使用'j'作为参考,否则你实际上并没有经过studCourseList而只是一遍又一遍地比较相同的两个项目。

答案 2 :(得分:1)

对于初学者来说,在if语句之后删除分号! if(CoursesList.get(i).getID().equals(studCourseList.get(i).getCid()))

如果这不能解决您的问题,我们需要有关studCourseListCoursesList的更多信息。我倾向于猜测在你的第二个循环中你应该使用j,如下所示: if (CoursesList.get(j).getID().equals(studCourseList.get(i).getCid()))

但如果没有明确的课程知识,我无法确定这是否正确。