【问题标题】:How should I add teacher to new course, while creating it?在创建新课程时,我应该如何将老师添加到新课程中?
【发布时间】:2019-05-21 20:20:04
【问题描述】:

我有课程课

public class Course implements Comparable<Course > {
private String nazwa;
private Integer lata;
private Teacher teacher;
private Student[] students;


public Course (String name, int years, int maxStudents, Teacher teacher) {
    this.name = name;
    this.years = years;
    students = new Student[maxStudents];
    this.teacher = teacher;

}

我不确定这样做是否正确

public void setTeacher(Teacher teacher)
{
    this.teacher = teacher;
}

然后我有一些代码允许用户创建新课程。我先问一些基本信息

System.out.print("ask for name");
String name= scan.next();
System.out.print("ask for years");
int years= scan.nextInt();
System.out.print("ask for maxStudents");
int maxStudents = scan.nextInt();

我正在尝试将老师添加到新课程中。教师具有唯一 ID

Course course;
System.out.print("Choose teacher:\n");

teachers 是一个列表,包含所有教师

for(Teacher t : teachers)
{
System.out.print(t.getName() + " - " + t.getAcademicDeggre() +"\n");
}

course.setTeacher(Teacher ?);

courses.add(new Course(name, years, maxStudents, teacher?);

@解决方案:

int choice= scan.nextInt() - 1;
String ID= teachers.get(choice).getID();
Teacher teacher = getTeacherForCourse(teachers, ID);

【问题讨论】:

  • 使用构造方法
  • setTeacher 是一个 setter 方法,可让您在创建 Course 对象后随时设置教师。如果你想每次都和老师一起创建一个对象,让它成为构造函数的一部分
  • 是的,但是如何从教师列表中获取具有特定ID的教师并将其放入课程构造函数courses.add(new Course(name, years, maxStudents, teacher));

标签: java set add subclass


【解决方案1】:
  1. 定义教师和课程之间的关系
    • 您将老师添加到课程中,但对我来说,没有老师,课程就无法存在,因此老师应该有一个课程列表(但这可能超出了范围)
  2. 从用户那里获取新课程的信息
  3. 确定课程教师
  4. 创建课程

第 3 步

private Teacher getTeacherForCourse(List<Teacher> teachers, long id) {
    for(Teacher teacher : teachers)
    {
        // Return the teacher if match the criteria
        if(teacher.getId() == id)
        {
            return teacher;
        }
    }
    return null; // or throw exception
}

或者使用 java 8

private Optional<Teacher> getTeacherForCourse(List<Teacher> teachers, long id) {
    return teachers.stream()
            .filter(teacher -> teacher.getId() == id)
            .findFirst();
}

第四步

Teacher teacher = getTeacherForCourse(teachers, 9454);
courses.add(new Course(name, years, maxStudents, teacher);

基本上你可以通过构造函数在创建时设置属性

courses.add(new Course(name, years, maxStudents, teacher));

或者在setter创建之后

Course course = new Course();

course.setName(name);
course.setYears(years);
course.setMaxSturdents(maxStudents);
course.setTeacher(teacher);

courses.add(course);

或组合

【讨论】:

  • 我不知道的一件事是,我怎么能从教师列表中选择教师?例如,我正在创建名为 Math 的课程,我想从教师列表中设置教师,例如,谁的 ID 为 9454 并将其作为课程属性
  • @G.Dawid 我已经更新了代码,只需遍历列表并保存符合您选择条件的老师
【解决方案2】:

最后一个问题,为什么 .getID 被忽略了?教师有 ID 属性即字符串。

我正在打印每个老师

for(int i = 0; i < teachers.size(); i++){
   System.out.print(i + teachers.get(i).getName() + " " + teachers.get(i).getSurName() + " - " + teachers.get(i).getAccademicDeggre());
  }

然后用户选择老师,按编号,他想添加到课程中

int choise = scan.nextInt();

接下来我想从列表中具有该索引的老师那里获取 ID

teachers.get(choise).getID();

【讨论】:

  • 代码看起来不错,可能没有设置ID。您还可以打印 ID System.out.print(i + " " + teachers.get(i).getID() + teachers.get(i).getName() + " " + teachers.get(i).getSurName() + " - " + teachers.get(i).getAccademicDeggre());。如果缺少 ID,请检查创建教师的位置以查看 ID 是否设置正确。
  • ID 是一个包含 11 个整数 fe 的字符串。字符串 ID = "12345678900";
  • 您有 2 个选项:1) 将 ID 设为 String,然后将其与 equals 进行比较(例如:idFromUser.equals(teachers.get(index).getID())。2)将 ID 设为 long 和然后将 teachers.get(i).getID() 转换为 long(例如:long teacherId = Long.parseLong(teachers.get(i).getID()) -> teacherId == idFromUser)。 注意您可以阅读以下文章以更好地了解==, .equals(), compareTo(), and compare()。结论你必须有相同的类型并且知道你比较的是什么(原语、字符串、对象等)
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 2018-08-03
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多