Java 将对象放入数组中

Java 将对象放入数组中,java,Java,我有两个班;课程和学生班。学生课堂上的一个领域是课程。运行此程序时,无法在声明的数组中保存课程对象。下面的代码将更清楚地说明出现故障的地方: package school; public class Course { private String courseName; private String courseGrade; int counter; public Course() { courseName=""; cou

我有两个班;课程和学生班。学生课堂上的一个领域是课程。运行此程序时,无法在声明的数组中保存课程对象。下面的代码将更清楚地说明出现故障的地方:

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]);
        }
    }
}
但是,我无法获得该输出。事实上,我得到了以下输出:

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

在循环结束时对同一索引执行
new
时,您正在销毁第一个
myStudent[i]
数据:

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

for(int i=0;i在循环结束时对同一索引执行
new
时,您正在销毁第一个
myStudent[i]
数据:

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

for(int i=0;i由于您有未定义的课程数量,我建议您使用,然后您使用

另外,想想你在这里做什么

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

公共无效注册课程(新课程)
{
myCourse.push(newCourse);//给定的myCourse是一个ArrayList
}

既然您有未定义的课程数量,我建议您使用,然后再使用

另外,想想你在这里做什么

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

公共无效注册课程(新课程)
{
myCourse.push(newCourse);//给定的myCourse是一个ArrayList
}

检查学生类中的registerCourses方法。它似乎覆盖了同一索引上的结果。 您可以使用列表来完成此操作,并不断添加它

这是我在学生课上更新的一个

    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;
导入java.util.ArrayList;
导入java.util.List;
公立班学生
{
私有字符串名;
私有字符串lastName;
专用int计数器;
私人名单课程;
公立学生()
{
firstName=“”;
lastName=“”;
myCourse=newarraylist();
计数器=0;
}
公立学生(先串,后串)
{
firstName=first;
lastName=last;
myCourse=newarraylist();
计数器=0;
}
公立学生(先串,后串,列出新课程)
{
firstName=first;
lastName=最后一个;
myCourse=新课程;
计数器++;
}
公共字符串getFirstName()
{
返回名字;
}
公共字符串getLastName()
{
返回姓氏;
}
公共int getNumberOfCourses()
{
返回计数器;
}
public void setStudent(字符串第一,字符串最后,列表新课程)
{
firstName=first;
lastName=last;
myCourse=新课程;
计数器++;
}
public void setStudent(先字符串,后字符串)
{
firstName=first;
lastName=last;
}
公共无效注册课程(新课程)
{
myCourse.add(新课程);
计数器++;
}
公共字符串toString()
{
字符串getString;
getString=(firstName+“”+lastName);

对于(inti=0;i检查学生类中的registerCourses方法。它似乎覆盖了相同索引上的结果。 您可以使用列表来完成此操作,并不断添加它

这是我在学生课上更新的一个

    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;
导入java.util.ArrayList;
导入java.util.List;
公立班学生
{
私有字符串名;
私有字符串lastName;
专用int计数器;
私人名单课程;
公立学生()
{
firstName=“”;
lastName=“”;
myCourse=newarraylist();
计数器=0;
}
公立学生(先串,后串)
{
firstName=first;
lastName=last;
myCourse=newarraylist();
计数器=0;
}
公立学生(先串,后串,列出新课程)
{
firstName=first;
lastName=last;
myCourse=新课程;
计数器++;
}
公共字符串getFirstName()
{
返回名字;
}
公共字符串getLastName()
{
返回姓氏;
}
公共int getNumberOfCourses()
{
返回计数器;
}
public void setStudent(字符串第一,字符串最后,列表新课程)
{
firstName=first;
lastName=last;
myCourse=新课程;
计数器++;
}
public void setStudent(先字符串,后字符串)
{
firstName=first;
lastName=last;
}
公共无效注册课程(新课程)
{
myCourse.add(新课程);
计数器++;
}
公共字符串toString()
{
字符串getString;
getString=(firstName+“”+lastName);

对于(int i=0;i编辑你的代码时,你没有完全理解
OOP
。有这么多
新课程()
,然后是一个immidate
新课程(名称、等级)
。对于每个对象的每个实例。一个不相关的查询:
学生
课程
类不应该使用
super()
this();
在构造函数方法中?为什么要使用数组而不是
Set
?判断代码时,你没有完全理解
OOP
。有太多
新课程()
,后面跟着一个immidate
新课程(姓名、年级)
。以及每个对象的每个实例。一个不相关的查询:
学生
课程
类不应该使用
super();
this()
在构造函数方法中?为什么使用数组而不是
Set
?感谢各位提供的见解。感谢各位提供的见解。
    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]);
        }
    }
}