我正在为Uni的项目创建JavaTraining学校模拟器。为此,我正在研究一种模拟单个上学日的方法。此方法的要求是将讲师设置为免费课程。每位讲师只能教一门课程。因此,对于每门课程,我都会遍历所有讲师,直到找到免费的。如果该教师也具有正确的证书来教授该课程,则将其设置为课程教师。当试图限制只教一门课程的讲师时,我总是遇到一个奇怪的问题。
我尝试通过以下方式实现它:
public void aDayAtSchool() {
courses.forEach((thisCourse) -> {
if(!thisCourse.hasInstructor()){
for(Instructor thisInstructor: instructors){
if(thisInstructor.isFree() && thisInstructor.canTeach(thisCourse.getSubject())){
thisInstructor.assignCourse(thisCourse);
thisCourse.setInstructor(thisInstructor);
break;
}
}
}
});
}
讲师保存在ArrayList中。 Instructor类本身是一个抽象类,主要包含具体方法。教师的子类是教师和演示者。
讲师类(代码真是一团糟,因为我一直在摆弄它以解决我的问题):
公共抽象类讲师扩展Person {
private Course assignedCourse;
private boolean isFree;
public Instructor(String Name, char Gender, int Age) {
super(Name, Gender, Age);
this.isFree = true;
}
public void assignCourse(Course thisCourse) {
this.assignedCourse = thisCourse;
this.isFree = false;
}
public void unassignCourse() {
this.assignedCourse = null;
this.isFree = true;
}
public Course getAssignedCourse() {
return assignedCourse;
}
public abstract boolean canTeach(Subject thisSubject);
public boolean isFree(){
return isFree;
}
}
演示程序类:
公共类演示程序扩展了教师{
public Demonstrator(String Name, char Gender, int Age) {
super(Name, Gender, Age);
}
@Override
public boolean canTeach(Subject thisSubject) {
return (thisSubject.getSpecialism() == 2);
}
}
教师班级与示教班级的模板完全相同。
我正在测试以下代码:
public static void main(String args[]) {
School dormers = new School("Dormers");
Subject basics = new Subject(1, 1, 5);
Subject Lab1 = new Subject(2, 2, 2);
Student Peter = new Student("Peter", 'M', 60);
Student Anabelle = new Student("Anabelle", 'F', 23);
Course course1 = new Course(basics, 1);
basics.setDescription("basics");
Lab1.setDescription("Lab1");
Course course2 = new Course(Lab1, 2);
Teacher tom = new Teacher("Tom", 'M', 20);
Demonstrator jerry = new Demonstrator("Jerry", 'F', 23);
dormers.add(course2);
dormers.add(course1);
dormers.add(tom);
dormers.add(jerry);
dormers.add(basics);
dormers.add(Peter);
dormers.add(Anabelle);
dormers.add(Lab1);
dormers.aDayAtSchool();
System.out.println(course1.hasInstructor());
}
最初,没有将教员添加到课程1。我事先对此进行了测试,以确保hasInstructor函数可以正常运行。它应该在dormers.aDayAtSchool()之后输出true。叫做。但是它总是打印为假。
我能找到的代码的唯一问题是thisInstructor.isFree()条件。奇怪的是,尝试以模仿此功能的任何方式编写此代码都会产生相同的问题。香港专业教育学院尝试了许多不同的方式来创建此布尔值,但每次出现相同的问题时。如果我摆脱了这种情况,仅使用canTeach方法,则该程序的其余部分将正常运行,并且True会按需打印到控制台。但是,如果我将其保留在if语句中,则代码会崩溃。测试时,我将条件修改为:
if(!thisInstructor.isFree() && thisInstructor.canTeach(thisCourse.getSubject())){
但是输出仍然为假。这很奇怪,因为我已经测试了canTeach函数,并知道这些输入将返回true。这意味着isFree布尔值必须为null,否则将无法保持输出为假。
在一个非常简单的项目中,我花了4个小时大部分时间都在努力解决这个问题。任何帮助将不胜感激。