2016-10-11 159 views
1

希望我的標題有意義。我正在嘗試使用我的代碼是逐行讀取具有關於學生(學生ID,名字,姓氏等)屬性以及他們所採取的課程的文件。我非常有信心,我的緩衝讀取器很好,但是當涉及到我的程序規格時,我有點失落。當我將CourseList ArrayList對象添加到我的Student ArrayList對象時,問題就出現了。代碼運行良好,但不會將courseLists添加到學生對象。基本上我製作了2個學生數組列表,這些數列列表應該包含與他們有關的課程。即)Student1,Course1,Course2等。將ArrayList對象添加到不同對象類型的現有ArrayList中

謝謝你在前進,這裏是我的代碼:

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. 

預先感謝您的傢伙!

+0

學生#添加方法不執行任何你使用一個HashMap認爲 – user3662708

+0

? –

+0

我沒有通過所有的代碼,但while(st.hasMoreTokens())如果這個循環迭代兩次在你的第一個學生,你將最終得到students.get(1),而你只有一個學生,也許這是不相關的解決問題,但重新考慮跟蹤當前學生的方式 –

回答

0

在您的代碼剪斷你的addCourse方法是空

 public void add(CourseList cl) { 

    } 

我想這是在這裏

+0

10關於如何編程此方法的任何想法?我不完全熟悉arrayLists。 – xfbim

+0

@xfbim https://www.tutorialspoint.com/java/util/arraylist_add_index.htm 這可能有助於理解如何將元素添加到ArrayList – Nordiii

1

恕我直言,你的問題,使用兩種不同類型的ArrayList中是不是在這裏是個好主意。你應該使用類似Map<Student, ArrayList<Course>>。它是:

  1. 人類可讀,因此可維護。
  2. 它的類型安全。
  3. 允許搜索任何學生在O(1)中完成的所有課程的操作。
+0

該程序的規格不幸需要鏈接列表或數組列表,我想在未來,我的講師會要求使用更強大的數據類型和搜索方法。 – xfbim

0

CourseList的ArrayList中正好被設置爲學生類,那麼它會工作

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