我遇到了对象和类的问题。
我必须定义两个类:
Course
:课程有代码,名称和学分数Teacher
:老师有名字和姓氏。他可以被问到他的全名。到目前为止一切顺利,我对它们没有任何问题,但是我必须做下一次我在过去2天试图做的任务,但我找不到合适的答案:
扩展班主任的代码。老师也有他可以教授的课程清单。在代码中添加一系列课程。还要在代码中添加函数
addCourse(Course aCourse)
。课程也可以从教师中删除。
我可以按照自己的方式做各事,但不知道如何创建addCourse(Course aCourse)
方法。
在下面查找我的编码,但必须按照所描述的方法:
public class Course {
private String courseCode;
private String courseName;
private String numberOfCredits;
public Course(String courseCode, String courseName, String numberOfCredits) {
super();
this.courseCode = courseCode;
this.courseName = courseName;
this.numberOfCredits = numberOfCredits;
}
public void print() {
System.out.println(courseCode + "\t" + courseName + "\t" + numberOfCredits);
}
public static void main(String[] args) {
Course[] courseArray = new Course[4];
System.out.println("Code" + "\t" + "Name" + "\t" + "Credits");
courseArray[0] = new Course("001", "Hist", "3");
courseArray[1] = new Course("002", "Phy", "3");
courseArray[2] = new Course("003", "Math", "3");
courseArray[3] = new Course("004", "Log", "3");
for (int i = 0; i < courseArray.length; i++) {
courseArray[i].print();
}
}
}
答案 0 :(得分:1)
数组是固定长度的对象集合,因此您需要确定数组的大小。我们调用数组MAX_COURSES
的长度。更高级的解决方案可能会在需要时调整阵列大小,但我觉得这超出了您的课程范围。
因此,您需要将Course[]
数组定义为Teacher
类的字段。数组声明的语法是quite easy to research,所以我不会把它放在这里。只需确保您的数组长度等于MAX_COURSES
。
现在,要向阵列添加课程,您需要知道将它们放在何处。要跟踪数组的下一个自由位置,最简单的方法是在类中声明一个字段:
private int numCourses = 0;
现在,当您添加新课程时,请将课程插入numCourses
指定的索引中。确保在添加课程后增加numCourses
。
最后,您应该在同意在阵列中插入新课程之前测试您的阵列是否已满,即检查numCourses
是否小于MAX_COURSES
。如果不是,则需要抛出异常。
答案 1 :(得分:1)
我建议使用集合(例如List
)而不是数组。代码看起来像:
public class Teacher {
private final String firstName;
private final String lastName;
private final List<Course> courses = new ArrayList<Course>();
public Teacher(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public void addCourse(Course course) {
courses.add(course);
}
}
基于该示例,您应该能够自己添加removeCourse
方法,以及在课程列表中操作所需的任何其他方法。
如果要将列表作为数组返回,可以随时转换它,例如:
public Course[] getCourses() {
return courses.toArray(new Course[courses.size()]);
}
如果你真的需要根据你的作业使用一个数组结构,你可以在添加和删除课程时尝试,从课程数组中构建一个列表,从该列表中添加或删除一个课程,将列表转换回一系列课程。
答案 2 :(得分:0)
这里有3个选项。
如果您允许使用List
构造:
private List<Course> courses = new ArrayList<Course>();
public void addCourse(Course aCourse)
{
if (aCourse == null)
{
return;
}
courses.add(aCourse);
}
使用数组,但它没有扩展。假设教师最多只能有X门课程,在我的例子10中:
// Yes, I stole Duncan's variable names
private final int MAX_COURSES = 10;
private int numCourses = 0;
private Course[] courses = new Course[MAX_COURSES];
public void addCourse(Course aCourse) {
if (aCourse == null)
{
return;
}
if (numCourses >= courses.length)
{
return;
}
courses[numCourses] = aCourse;
numCourses++;
}
这与前一项相同,但有点聪明,因为它可以通过使用静态方法Arrays.copyOf
// Yes, I stole Duncan's variable names
private final int MAX_COURSES = 10;
private int numCourses = 0;
private Course[] courses = new Course[MAX_COURSES];
public void addCourse(Course aCourse) {
if (aCourse == null)
{
return;
}
if (numCourses >= courses.length)
{
int size = courses.length * 2;
courses = Arrays.copyOf(courses, size);
}
courses[numCourses] = aCourse;
numCourses++;
}