2016-10-11 5 views
1

Надеюсь, мой заголовок имеет смысл. То, что я пытаюсь сделать с моим кодом, - это прочитать строку в строке, которая имеет атрибуты об учениках (идентификатор студента, имя, фамилия и т. Д.) И пройденные им курсы. Я уверен, что мой буферизированный читатель в порядке, но я немного потерял, когда речь зашла о спецификациях моей программы. Проблема возникает, когда я добавляю объекты ObjectList ArrayList к объектам Student ArrayList. Код работает нормально, но не добавляет списки курсов к объектам студента. По существу, я делаю 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

Student # добавить метод не делает ничего – user3662708

+0

Рассматривали ли вы с помощью HashMap? –

+0

Я не прошел весь код ur, но пока (st.hasMoreTokens()), если этот цикл повторяется дважды в вашем первом ученике, вы в конечном итоге получите students.get (1), в то время как у вас есть только один студент, возможно, это не связано к проблеме, но переосмыслить то, как вы отслеживаете своего текущего студента. –

ответ

0

В коде отрезала ваш метод addCourse пуст

 public void add(CourseList cl) { 

    } 

Я думаю, что это ваша проблема здесь

+0

Любые идеи о том, как программировать этот метод? Я не полностью разбираюсь в массивах. – 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

Просто установите ArrayList в CourseList для студенческого класса, то он будет работать

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; 
     } 
    } 
Смежные вопросы