2016-08-25 70 views
0

我有两个类;课程和学生课程。学生课程中的一个领域是课程。当我运行这个程序时,我无法在声明的数组中保存一个课程对象。代码里的东西都没有下文将给出更多的光线:将一个对象保存到一个数组中

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

的问题是在第二个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'。有很多'新课程()',后面跟着一个immidiate'新课程(名称,等级)'。对于每个对象的每个实例。 – SomeJavaGuy

+1

一个无关的查询:不应该在构造函数方法中使用'super();'或'this();''Student'和'Course'类吗? – 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++; 
} 

你加入一个课程,然后说:为我的阵列课程的每个位置添加新的我当然给

您应该使用索引,或者使用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方法。它似乎在同一个索引上压倒了你的结果。 你可以用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(而不是2)。

相关问题