2016-08-25 5 views
0

Ich habe zwei Klassen; Kurse und Kurse. Eines der Felder in der Student-Klasse ist ein Kurs. Wenn ich dieses Programm ausführe, kann ich kein Kursobjekt im deklarierten Array halten. Der folgende Code wird mehr Licht geben, wo die Dinge scheitern:Halten eines Objekts in ein Array

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

das Problem in den zweiten for-Schleife, das natürlich Objekt halten nicht in der Lage ist, dass ich es will. Ich möchte das Programm zur Ausgabe von etwas ähnliches auf die folgenden:

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 

jedoch, dass die Ausgabe zu erhalten, ich bin nicht in der Lage. Tatsächlich bekomme ich folgende Ausgabe:

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

Ihren Code zu beurteilen, haben Sie 'OOP' nicht ganz verstanden. Es gibt so viele 'neue Kurse()', gefolgt von einem sofortigen 'neuen Kurs (Name, Note)'. Und das für jede Instanz jedes Objekts. – SomeJavaGuy

+1

Eine nicht verwandte Abfrage: sollte nicht die 'Student'- und' Course'-Klasse entweder 'super();' oder 'this();' in den Konstruktormethoden verwenden? – px06

+0

Warum verwenden Sie Arrays anstelle von 'Set '? –

Antwort

6

Sie die ersten myStudent[i] Daten zerstören, wenn ein new auf dem gleichen Index am Ende der Schleife ausführen:

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

Da Sie eine nicht definierte Anzahl von Kursen würde ich vorschlagen ArrayList verwenden und dann tun Sie

Denken Sie auch, was Sie hier tun.

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

Sie fügen einen Kurs und dann für jede Position für einen Kurs in meinem Array den neuen Kurs hinzufügen, das ich hatte, sagen

Sie entweder einen Index verwenden sollten, oder eine Arraylist verwenden, oder verknüpfte Liste usw.

Eg

public void registerCourses(Course newCourse, int index) 
{ 

     myCourse[index]=newCourse; 

} 

oder

public void registerCourses(Course newCourse) 
{ 

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

} 
+0

Danke Jungs für die Einblicke, die Sie angeboten haben. – bmask

0

Überprüfen Sie die registerCourses Methode innerhalb Student-Klasse. Es scheint, als ob Sie Ihr Ergebnis auf denselben Index überschrieben haben. Sie können das mit List machen und das hinzufügen.

Hier ist der, den ich Student Class aktualisiert.

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

Testklasse:

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

Hinweis: Für 3 Studenten, müssen Sie Schleife, bis i < 3 (nicht 2) zu durchlaufen.

Verwandte Themen