2016-08-25 3 views
0

У меня есть два класса; Курс и Студенческие классы. Одно из полей в классе Student - это курс. Когда я запускаю эту программу, я не могу удерживать объект курса в объявленном массиве. Приведенный ниже код будет давать больше света, где вещи терпят неудачу:Проведение объекта в массив

package school; 
public class Course 
{ 
    private String courseName; 
    private String courseGrade; 
    int counter; 

    public Course() 
    { 
     courseName=""; 
     courseGrade=""; 
     counter = 0; 
    } 
    public Course (String name,String grade) 
    { 
     courseName=name; 
     courseGrade=grade; 
     counter=0; 
    } 
    public String getCourseName() 
    { 
     return courseName; 
    } 
    public String getCourseGrade() 
    { 
     return courseGrade; 
    } 
    public void setCourse(String name,String grade) 
    { 
     courseName=name; 
     courseGrade=grade; 
     counter++; 
    } 

    @Override 
    public String toString() 
    { 
     return String.format("%-10s %-10s", courseName,courseGrade); 
    } 
} 
package school; 
public class Student 
{ 
    private String firstName; 
    private String lastName; 
    private int counter; 
    private Course [] myCourse; 

    public Student() 
    { 
     firstName=""; 
     lastName=""; 
     myCourse =new Course[2]; 
     for (int i=0;i<2;i++) 
     { 
      myCourse [i]= new Course(); 
     } 
     counter= 0; 
    } 
    public Student(String first,String last) 
    { 
     firstName=first; 
     lastName=last; 
     myCourse =new Course[2]; 
     for (int i=0;i<2;i++) 
     { 
      myCourse [i]= new Course(); 
     } 
     counter= 0; 
    } 
    public Student(String first,String last, Course [] newCourse) 
    { 
     firstName=first; 
     lastName=last; 
     myCourse= new Course [2]; 
     for (int i=0;i<2;i++) 
     { 
      myCourse [i]= new Course(); 
     } 
     counter++; 
    } 
    public String getFirstName() 
    { 
     return firstName; 
    } 
    public String getLastName() 
    { 
     return lastName; 
    } 
    public int getNumberOfCourses() 
    { 
     return counter; 
    } 
    public void setStudent(String first,String last, Course [] newCourse) 
    { 
     firstName=first; 
     lastName=last; 
     myCourse= new Course [2]; 
     for (int i=0;i<2;i++) 
     { 
      myCourse [i]= newCourse[i]; 
     } 
     counter++; 
    } 
    public void setStudent(String first,String last) 
    { 
     firstName=first; 
     lastName=last; 
    } 

    public void registerCourses(Course newCourse) 
    { 
     for (int i=0;i<2;i++) 
     { 
      myCourse[i]=newCourse; 
     } 
     counter++; 
    } 
    public String toString() 
    { 
     String getString; 
     getString =(firstName+" "+lastName); 

     for(int i=0;i<2;i++) 
     { 
      getString=getString+String.format("%n %-10s",myCourse[i]); 
     } 
     return getString; 
    } 
} 
package school; 

import java.util.*; 
public class Test 
{ 
static Scanner cin= new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     String first,last,name,grade; 

     Student [] myStudent= new Student [2]; 
     Course [] myCourse= new Course [2]; 
     for (int i=0;i<2;i++) 
     { 
      myStudent[i] = new Student(); 
      System.out.println("enter name:"); 
      first=cin.next(); 
      System.out.println("Last Name:"); 
      last=cin.next(); 
      // For loop within a for loop 
      for (int j=0;j<2;j++) 
      { 
       myCourse [j]= new Course(); 
       System.out.println("Course Name:"); 
       name=cin.next(); 
       System.out.println("Course Grade:"); 
       grade=cin.next(); 
      myCourse [j] = new Course(name,grade); 
      myStudent[i].registerCourses(myCourse [j]); 
      } 
      myStudent [i]=new Student(first, last, myCourse); 
     } 
     for (int i=0;i<2;i++) 
     { 
      System.out.println(myStudent[i]); 
     } 
    } 
} 

проблема во втором для цикла, который не в состоянии удерживать объект курса, что я хочу его. Я хочу программу для вывода что-то похожее на следующее:

Student One 
MAT    A  
PHY    B  
BIO    C  
CHE    A  
LAN    A+ 
HIS    A  
Student Two 
COM    C  
Statistics  A+ 
COM    C  
Mathematics  D  
Geography  A  
Biology   C+ 
Student Three 
Biology   C  
Mathematics  D  
LAN    A+ 
COM    B  
Physics   B  
Physics   B 

Однако я не могу получить этот вывод. На самом деле я получаю следующий результат:

enter name: 
Student 
Last Name: 
One 
Course Name: 
MAT 
Course Grade: 
A 
Course Name: 
COM 
Course Grade: 
C 
enter name: 
Student 
Last Name: 
Two 
Course Name: 
STA 
Course Grade: 
A 
Course Name: 
ENG 
Course Grade: 
B 
Student One 


Student Two 
+4

Судя по вашему коду, вы не полностью поняли «ООП». Существует так много «нового курса»(), за которым следует «новый курс» (имя, класс). И это для каждого экземпляра каждого объекта. – SomeJavaGuy

+1

Несвязанный запрос: не должен ли класс 'Student' и' Course' использовать либо 'super();' или 'this();' в методах конструктора? – px06

+0

Почему вы используете массивы вместо 'Set '? –

ответ

6

вы разрушаете первые данные myStudent[i] при выполнении new на тот же индекс в конце вашего цикла:

for (int i=0;i<2;i++) 
    { 
     myStudent[i] = new Student(); 
     <some code> 
     myStudent [i]=new Student(first, last, myCourse); 
0

Поскольку у вас есть неопределенное число из курсов, которые я бы предложил, используя ArrayList, а затем вы делаете

Также подумайте, что вы здесь делаете.

public void registerCourses(Course newCourse) 
{ 
    for (int i=0;i<2;i++) 
    { 
     myCourse[i]=newCourse; 
    } 
    counter++; 
} 

Вы добавляете один курс, а затем говоря для каждой позиции для курса в моем массиве добавить новый курс я был дан

Вы должны либо использовать индекс, или использовать ArrayList, или связанный список и т. д.

Например

public void registerCourses(Course newCourse, int index) 
{ 

     myCourse[index]=newCourse; 

} 

или

public void registerCourses(Course newCourse) 
{ 

     myCourse.push(newCourse); // that is given myCourse is an ArrayList<Course> 

} 
+0

Спасибо, ребята, за идеи, которые вы предложили. – bmask

0

Проверьте метод registerCourses внутри класса Student. Кажется, что он отменяет ваш результат по одному и тому же индексу. Вы можете сделать это со списком и продолжать добавлять это.

Вот я обновил класс учеников.

package com.stack; 

import java.util.ArrayList; 
import java.util.List; 

public class Student 
{ 
    private String firstName; 
    private String lastName; 
    private int counter; 
    private List<Course> myCourse; 

    public Student() 
    { 
     firstName=""; 
     lastName=""; 
     myCourse =new ArrayList<Course>(); 

     counter= 0; 
    } 
    public Student(String first,String last) 
    { 
     firstName=first; 
     lastName=last; 
     myCourse =new ArrayList<Course>(); 

     counter= 0; 
    } 
    public Student(String first,String last, List<Course> newCourse) 
    { 
     firstName=first; 
     lastName=last; 
     myCourse= newCourse; 

     counter++; 
    } 
    public String getFirstName() 
    { 
     return firstName; 
    } 
    public String getLastName() 
    { 
     return lastName; 
    } 
    public int getNumberOfCourses() 
    { 
     return counter; 
    } 
    public void setStudent(String first,String last, List<Course> newCourse) 
    { 
     firstName=first; 
     lastName=last; 
     myCourse= newCourse; 

     counter++; 
    } 
    public void setStudent(String first,String last) 
    { 
     firstName=first; 
     lastName=last; 
    } 

    public void registerCourses(Course newCourse) 
    { 
     myCourse.add(newCourse); 
     counter++; 
    } 
    public String toString() 
    { 
     String getString; 
     getString =(firstName+" "+lastName); 

     for(int i=0;i<2;i++) 
     { 
      getString=getString+String.format("%n %-10s",myCourse.get(i)); 
     } 
     return getString; 
    } 
} 

тест:

package com.stack; 

import java.util.*; 
public class Test 
{ 
static Scanner cin= new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     String first,last,name,grade; 

     Student [] myStudent= new Student [2]; 
     List<Course> myCourse= new ArrayList<Course>(); 
     for (int i=0;i<2;i++) 
     { 
      myStudent[i] = new Student(); 
      System.out.println("enter name:"); 
      first=cin.next(); 
      System.out.println("Last Name:"); 
      last=cin.next(); 
      // For loop within a for loop 
      for (int j=0;j<2;j++) 
      { 
       System.out.println("Course Name:"); 
       name=cin.next(); 
       System.out.println("Course Grade:"); 
       grade=cin.next(); 
       Course myC = new Course(name,grade); 
      myCourse.add(myC); 
      myStudent[i].registerCourses(myC); 
      } 
      myStudent [i]=new Student(first, last, myCourse); 
     } 
     for (int i=0;i<2;i++) 
     { 
      System.out.println(myStudent[i]); 
     } 
    } 
} 

Примечание: Для 3-х студентов, вы должны повторять цикл до я < 3 (не 2).

Смежные вопросы