2016-08-25 6 views
0

私には2つのクラスがあります。コースと学生クラス。 Studentクラスのフィールドの1つがコースです。このプログラムを実行すると、宣言された配列にコースオブジェクトを保持できません。物事が失敗しているところ以下のコードは、より多くの光を与える:オブジェクトを配列に保持する

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

問題は、私はそれがしたいコースのオブジェクトを保持することができない2番目のforループです。私はその出力を得ることができませんしかし

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

あなたのコードを判断するには、あなたは 'OOP'を完全に理解していませんでした。非常に多くの 'new Course()'が続き、 '新しいコース(名前、グレード)'が続きます。そして、各オブジェクトの各インスタンスに対して。 – SomeJavaGuy

+1

関連性のないクエリ: 'Student'クラスと' Course'クラスはコンストラクタメソッドで 'super();'または 'this();'を使用するべきではありませんか? – px06

+0

なぜ 'Set 'の代わりに配列を使うのですか? –

答えて

6

あなたのループの最後で同じインデックスにnewを実行するときに、あなたが最初にmyStudent[i]データを破壊している:

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

あなたは1つのコースを追加し、あなたがインデックスを使用するか、または配列リストを使用する必要がありますいずれか

Iが与えられた新しいコースを追加し、私の配列内のコースの位置毎にを言って、またはされていますリンクリストなど

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

Studentクラスの内部registerCourses方法を確認してください。それは同じインデックス上のあなたの結果をオーバーライドしているようです。 Listでそれを行い、それを追加し続けることができます。

私は学生クラスを更新しました。

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)までループを反復処理する必要があります。

関連する問題