2016-10-11 126 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; 
     } 
    }