Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用另一个数组列表的对象从一个数组列表获取值_Java_Object_Arraylist - Fatal编程技术网

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

Java 使用另一个数组列表的对象从一个数组列表获取值,java,object,arraylist,Java,Object,Arraylist,我有3个数组列表。 1) 学生(身份证、姓名、课程) 2) 课程(ID、姓名、学时) 3) 学生课程(学生ID,课程ID) 我正在通过StudentID从StudentCourses中进行搜索,并以其姓名注册课程。 我的StudentCourse ArrayLIst有这样的对象 49(学生证) CS233(课程编号) 49(学生证) CS231(课程编号) 当用户搜索学生时,假设我正在搜索注册号为49的Johnna。 结果是 注册编号:49 姓名:约翰娜 课程:理学学士 注册课程: CS233

我有3个数组列表。 1) 学生(身份证、姓名、课程) 2) 课程(ID、姓名、学时) 3) 学生课程(学生ID,课程ID)

我正在通过StudentID从StudentCourses中进行搜索,并以其姓名注册课程。 我的StudentCourse ArrayLIst有这样的对象

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

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

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

注册编号:49 姓名:约翰娜 课程:理学学士 注册课程: CS233 CS231

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

CS233 哎呀 平衡计分卡

CS231 算法 平衡计分卡

我试过这个代码,但似乎不起作用。它不断给出垃圾值,或者只打印所有课程名称,直到出现空异常:

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

        }

    }

}
if(myStudent==null){
系统输出打印(“未找到任何记录”);
}否则{
System.out.print(“学生ID:+myStudent.getID()+”\n全名:+myStudent.getName()+”\n程序:+myStudent.getProgram()+
“\n总学时数:”+(Integer.parseInt(myStudent.gettotalcleds())*3420+“Rs”+“\n注册课程:\n”);
}
对于(int i=0;i
上面的部分带来了学生信息,第一个循环用于根据学生ID注册的课程,第二个循环不起作用。
请注意,所有对象都位于不同的直线上。如果你不明白我想问的,请不要投反对票。问问吧。我会再次解释。

我建议您在这种情况下使用
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>();
班级学生{
私有字符串id;
私有字符串名称;
私有字符串程序;
//吸气剂设定器
}
班级课程{
私有字符串id;
私有字符串名称;
私人时间;
//吸气剂设定器
}
班级学生课程{
私人字符串学生ID;
私有字符串;
//吸气剂设定器
}
Map students=newhashmap();
Map courses=newhashmap();

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

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>();
班级学生{
私有字符串id;
私有字符串名称;
私有字符串程序;
//吸气剂设定器
}
班级课程{
私有字符串id;
私有字符串名称;
私人时间;
//吸气剂设定器
}
班级学生课程{
私人字符串学生ID;
私有字符串;
//吸气剂设定器
}
Map students=newhashmap();
Map courses=newhashmap();

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

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>();
班级学生{
私有字符串id;
私有字符串名称;
私有字符串程序;
//吸气剂设定器
}
班级课程{
私有字符串id;
私有字符串名称;
私人时间;
//吸气剂设定器
}
班级学生课程{
私人字符串学生ID;
私有字符串;
//吸气剂设定器
}
Map students=newhashmap();
Map courses=newhashmap();

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

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>();
班级学生{
私有字符串id;
私有字符串名称;
私有字符串程序;
//吸气剂设定器
}
班级课程{
私有字符串id;
私有字符串名称;
私人时间;
//吸气剂设定器
}
班级学生课程{
私人字符串学生ID;
私有字符串;
//吸气剂设定器
}
Map students=newhashmap();
Map courses=newhashmap();

在嵌套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;
    }

应该使用“j”作为参考,否则您实际上不是在浏览studCourseList,而是在反复比较相同的两个项目。

在嵌套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;
    }

应该使用“j”作为参考,否则您实际上不是在浏览studCourseList,而是在反复比较相同的两个项目。

在嵌套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;
    }

应该使用“j”作为参考,否则您实际上不是在浏览studCourseList,而是在反复比较相同的两个项目。

在嵌套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;
    }

应该使用“j”作为参考,否则您实际上不是在浏览studCourseList,而是在反复比较相同的两个项目。

对于初学者,请删除此if语句后的分号!
if(CoursesList.get(i).getID().equals(studCourseList.get(i).getCi