我有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注册的课程,第二个循环不起作用。 请注意,所有对象都在不同的行上。如果你没有得到我想要提出的问题,请不要贬低。请问。我会再试一次解释。
答案 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()))
如果这不能解决您的问题,我们需要有关studCourseList
和CoursesList
的更多信息。我倾向于猜测在你的第二个循环中你应该使用j
,如下所示:
if (CoursesList.get(j).getID().equals(studCourseList.get(i).getCid()))
但如果没有明确的课程知识,我无法确定这是否正确。