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