将ArrayList对象添加到不同对象类型

时间:2016-10-11 16:05:02

标签: java arraylist

希望我的头衔有道理。我试图用我的代码做的是逐行读取一个文件,该文件具有关于学生(学生ID,名字,姓氏等)和他们所学的课程的属性。我非常有信心我的缓冲读卡器很好,但是在我的程序规格方面,我有点迷失。当我将CourseList ArrayList对象添加到Student ArrayList对象时,会出现问题。代码运行正常,但不会将courseLists添加到student对象。基本上我正在制作2个学生数组列表,这些列表应该包含与之相关的课程。即)学生1,课程1,课程2等。

提前谢谢,这是我的代码:

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;

public class studentDir {
    static int currentStudent = 0;
    public static void main(String args[]) throws IOException{
        ArrayList<Student> students = new ArrayList<Student>();

        Scanner input = new Scanner(new File("WarmUpData.txt"));

        while(input.hasNextLine()) {

            String line = input.nextLine();
            StringTokenizer st = new StringTokenizer(line,",");

                while(st.hasMoreTokens()){
                    String first, last, idNo;
                    last = st.nextToken();
                    first = st.nextToken();
                    System.out.println("Added student: "+last+", "+first);
                    idNo = st.nextToken();
                    System.out.println("Stored ID: "+idNo);
                    Student s = new Student(last, first, idNo);
                    students.add(s);
                    line = input.nextLine();
                    st = new StringTokenizer(line,",");
                    while(st.hasMoreTokens()){
                        String x = st.nextToken();
                        System.out.println("If controller read in: "+x);
                        if(x.equals("-999")){
                            line = input.nextLine();
                            st = new StringTokenizer(line, ",");
                            System.out.println("Added Credits & GPA");
                            Float totalCredits = Float.parseFloat(st.nextToken());
                            Float gpa = Float.parseFloat(st.nextToken());
                            students.get(currentStudent).storeGPA(totalCredits, gpa);
                            System.out.println("GPA Read In : "+students.get(currentStudent).getGPA());
                            currentStudent++;
                        }
                        else{
                            System.out.println("Adding course.");
                            String courseID = x;
                            float credits = Float.parseFloat(st.nextToken());
                            String grade = st.nextToken();
                            System.out.println(x+", "+grade);
                            CourseList cl = new CourseList(courseID,grade,credits);
                            s.add(cl);
                            System.out.println(cl.toString());
                            System.out.println(courseID+" "+credits+" "+grade+" added.");
                            line = input.nextLine();
                            st = new StringTokenizer(line,",");
                            }
                        }

                    for(Student x : students)
                        System.out.println(x.toString());                       
                }

        }
        input.close();      
        currentStudent = 0;
    }
}

import java.util.ArrayList;

public class Student {
    private String firstName;
    private String lastName;
    private String studentID;
    private float gpa;
    private float totalCredits;
    private ArrayList<CourseList> courses = new ArrayList<>();

    Student(String y, String x, String z){
            this.firstName = x;
            this.lastName = y;
            this.studentID = z;
    }

        public String toString(){
            String x = (this.firstName+" "+this.lastName+" "+this.studentID+".");
            return x;
        }
        public void setGPA(float x){
            this.gpa = x;
        }

        public float getGPA(){
            return gpa;
        }

        public String getID(){
            return this.studentID;
        }

        public void gpaCalc(Student stu, String id){
            totalCredits = 0;

        }

        public void storeGPA(float tcredits, float gpa){
            this.gpa = gpa;
            this.totalCredits = tcredits;
        }
        public void add(CourseList cl) {

        }

}

public class CourseList {
    String idNo, grade, courseID;
    float credits;
    float gpa;

    public CourseList(String x, String y, float z) {
        this.courseID = x;
        this.grade = y;
        this.credits = z;
    }

    public String toString(){
        String x = ("Course ID: "+this.courseID+", Grade : "+this.grade+", Credits Earned : "+this.credits+".");
        return x;
    }

    public float getCredits() {
        return this.credits;
    }
}


Input: 
Jones,Mary,903452
4342,2.5,A
3311,4,B+
-999
6.5,3.569
Martin,Joseph,312345
4598,3,C
1122,3,A-
2467,4,A
-999
10,3.31

Output: 
Added student: Jones, Mary
Stored ID: 903452
If controller read in: 4342
Adding course.
4342, A
Course ID: 4342, Grade : A, Credits Earned : 2.5.
4342 2.5 A added.
If controller read in: 3311
Adding course.
3311, B+
Course ID: 3311, Grade : B+, Credits Earned : 4.0.
3311 4.0 B+ added.
If controller read in: -999
Added Credits & GPA
GPA Read In : 3.569
Mary Jones 903452.
Added student: Martin, Joseph
Stored ID: 312345
If controller read in: 4598
Adding course.
4598, C
Course ID: 4598, Grade : C, Credits Earned : 3.0.
4598 3.0 C added.
If controller read in: 1122
Adding course.
1122, A-
Course ID: 1122, Grade : A-, Credits Earned : 3.0.
1122 3.0 A- added.
If controller read in: 2467
Adding course.
2467, A
Course ID: 2467, Grade : A, Credits Earned : 4.0.
2467 4.0 A added.
If controller read in: -999
Added Credits & GPA
GPA Read In : 3.31
Mary Jones 903452.
Joseph Martin 312345.

先谢谢你们!

3 个答案:

答案 0 :(得分:1)

恕我直言,使用两种不同类型的ArrayList在这里不是一个好主意。您应该使用类似Map<Student, ArrayList<Course>>的内容。它是:

  1. 人类可读且可维护。
  2. 它的类型安全。
  3. 启用搜索任何学生在O(1)中完成的所有课程的操作。

答案 1 :(得分:0)

在你的代码中,你的addCourse方法是空的

        public void add(CourseList cl) {

    }

我想这是你的问题

答案 2 :(得分:0)

只需将CourseList的ArrayList设置为Student Class,然后就可以了

public class studentDir {
                static int currentStudent = 0;
                public static void main(String args[]) throws IOException{
                    ArrayList<Student> students = new ArrayList<Student>();
    ArrayList<CourseList> courseLists=new ArrayList<>();
                    Scanner input = new Scanner(new File("WarmUpData.txt"));

                    while(input.hasNextLine()) {

                        String line = input.nextLine();
                        StringTokenizer st = new StringTokenizer(line,",");

                            while(st.hasMoreTokens()){
                                String first, last, idNo;
                                last = st.nextToken();
                                first = st.nextToken();
                                System.out.println("Added student: "+last+", "+first);
                                idNo = st.nextToken();
                                System.out.println("Stored ID: "+idNo);
                                Student s = new Student(last, first, idNo);

                                line = input.nextLine();
                                st = new StringTokenizer(line,",");
                                while(st.hasMoreTokens()){
                                    String x = st.nextToken();
                                    System.out.println("If controller read in: "+x);
                                    if(x.equals("-999")){
                                        line = input.nextLine();
                                        st = new StringTokenizer(line, ",");
                                        System.out.println("Added Credits & GPA");
                                        Float totalCredits = Float.parseFloat(st.nextToken());
                                        Float gpa = Float.parseFloat(st.nextToken());
                                        students.get(currentStudent).storeGPA(totalCredits, gpa);
                                        System.out.println("GPA Read In : "+students.get(currentStudent).getGPA());
                                        currentStudent++;
                                    }
                                    else{
                                        System.out.println("Adding course.");
                                        String courseID = x;

                                        float credits = Float.parseFloat(st.nextToken());
                                        String grade = st.nextToken();
                                        System.out.println(x+", "+grade);
                                        CourseList cl = new CourseList(courseID,grade,credits);
                                       courseLists.add(cl);
                                        s.setCourses(courseLists);
                                        System.out.println(cl.toString());
                                        System.out.println(courseID+" "+credits+" "+grade+" added.");
                                        line = input.nextLine();
                                        st = new StringTokenizer(line,",");

                                    }
                                    students.add(s);

                                    }

                                for(Student x : students)
                                    System.out.println(x);                       
                            }

                    }
                    input.close();      
                    currentStudent = 0;
                }
            }



     class Student {
        private String firstName;
        private String lastName;
        private String studentID;
        private float gpa;
        private float totalCredits;
        private ArrayList<CourseList> courses = new ArrayList<>();

        Student(String y, String x, String z) {
            this.firstName = x;
            this.lastName = y;
            this.studentID = z;
        }

        public String toString() {
            String x = (this.firstName + " " + this.lastName + " " + this.studentID + ".");
            return x;
        }

        public void setGPA(float x) {
            this.gpa = x;
        }

        public float getGPA() {
            return gpa;
        }

        public String getID() {
            return this.studentID;
        }

        public void gpaCalc(Student stu, String id) {
            totalCredits = 0;

        }

        public void storeGPA(float tcredits, float gpa) {
            this.gpa = gpa;
            this.totalCredits = tcredits;
        }



        public ArrayList<CourseList> getCourses() {
            return courses;
        }

        public void setCourses(ArrayList<CourseList> courses) {
            this.courses = courses;
        }

    }

    class CourseList {
        String idNo, grade, courseID;
        float credits;
        float gpa;

        public CourseList(String x, String y, float z) {
            this.courseID = x;
            this.grade = y;
            this.credits = z;
        }

        public String toString() {
            String x = ("Course ID: " + this.courseID + ", Grade : " + this.grade + ", Credits Earned : " + this.credits
                    + ".");
            return x;
        }

        public float getCredits() {
            return this.credits;
        }
    }