Какой будет правильный метод для передачи [из основного класса Runner] созданных объектов Student в Список в [public class Group] и для передачи объектов Group в List в [public class Faculty]? Я пытался сделать это с помощью конструктора, но это не кажется хорошей идеей.

public class Runner {
public static void main(String[] args) {

 Student student1 = new Student ("Steve", "Faculty of Mathematics", "Group 21");
 Student student2 = new Student ("Oliver", "Faculty of Chemistry", "Group 22");

 Group group1 = new Group(21, (student1));
 Group group2 = new Group(22, (student2));

 Faculty faculty1 = new Faculty("Faculty of Mathematics", (group));

    }
}

public class Group { 
    private int groupNumber;
    private ArrayList<Student> studentList = new ArrayList<Student>();

    public Group(int groupNumber, Student student) {
        this.groupNumber = groupNumber;
        this.student = student;
    }

    //adds student objects to the list
    List<Student> getStudents() {
        studentList.add(student);
        return studentList;
    }
}

public class Faculty {
   private ArrayList<Group> groupList = new ArrayList<Group>();
//some code
}
0
user12761284 6 Май 2020 в 09:56

2 ответа

Лучший ответ

Один синтаксически правильный способ достижения этого - добавить student к studentList в конструкторе, например,

public class Group {
  private int groupNumber;
  private List<Student> studentList = new ArrayList<>();

  public Group(int groupNumber, Student student) {
    this.groupNumber = groupNumber;
    this.studentList.add(student);
  }

  // Getter should only return the list
  public List<Student> getStudents() {
    return studentList;
  }
}

Однако я бы порекомендовал вам изменить конструктор, чтобы он принимал список студентов и предоставлял метод addStudent, например,

public class Group {
  private int groupNumber;
  private List<Student> studentList;

  public Group(int groupNumber, List<Student> students) {
    this.groupNumber = groupNumber;
    this.studentList =students;
  }

  public void addStudent(Student student) {
    studentList.add(student);
  }

  //adds student objects to the list
  public List<Student> getStudents() {
    return studentList;
  }
}

И измените вызывающую функцию на выполнение Group group1 = new Group(21, new ArrayList<>(student1)); < STRONG> Примечание

  • Вам не нужно переносить аргументы в (), например Group group1 = new Group(21, (student1)); можно записать как Group group1 = new Group(21, student1);
  • Получатели не должны иметь логику, а только возвращать объект
2
Michael Kreutz 6 Май 2020 в 07:11

Хорошим методом oop было бы добавить метод append() как в класс Group, так и в класс Faculty.

Поскольку Group и Faculty имеют списки, которые содержат несколько объектов, было бы неплохо сгенерировать ваших учеников с помощью цикла, либо получая входные данные от пользователя, либо другим способом, который вы предпочитаете генерировать, и добавьте их в список в Group Arraylist.

Для класса Faculty эта идея будет работать нормально.

Сердце oop не повторяет один и тот же код нигде в вашей программе. Поэтому я рекомендую вашему классу Student просто хранить в нем свою личную информацию. И когда они находятся в объекте Group, у них есть информация о группе, как и в случае, когда объект Group находится в объекте Faculty, у него есть информация о факультете студента.

Базовая структура вашего Group, Faculty может быть такой, как показано ниже.

class Group {

  private int groupNumber;
  private ArrayList<Student> studentList = new ArrayList<Student>();

  public Group(int groupNumber) {
    this.groupNumber = groupNumber;

  }

  public void append(Student student){

    this.studentList.add(student);

  }

  public ArrayList getlist(){

    return this.studentList;

  }

}

class Faculty {
  private ArrayList<Group> groupList = new ArrayList<Group>();

  public Faculty(String faculty) {
  }

  public void append(Group group){

    this.groupList.add(group);

  }

  public ArrayList getlist(){

    return this.groupList;

  }

}

Затем вы можете настроить класс класса Runner по своему усмотрению. Генерация студентов, как вы хотите, через цикл или как ваше желание.

class Runner {
  public static void main(String[] args) {

    Student student1 = new Student ("Steve");
    Student student2 = new Student ("Oliver");

    Group group1 = new Group(21);
    group1.append(student1);
    Group group2 = new Group(22);
    group2.append(student2);

    Faculty faculty1 = new Faculty("Faculty of Mathematics");
    faculty1.append(group1);
    faculty1.append(group2);

  }
}

Более эффективная программа будет как ниже. Он генерирует способность в соответствии с вашим вкладом и добавляет к ней каждую группу.

class Runner {
  public static void main(String[] args) {

    Scanner scanner=new Scanner(System.in);

    for(int k=0;k<5;k++) {

      Faculty faculty1 = new Faculty(scanner.nextLine());
      for(int j=0;j<20;j++) {

        Group group = new Group(j);
        for (int i = 0; i < 10; i++) {
          group.append(new Student(scanner.nextLine()));
        }
        faculty1.append(group);

      }

    }

  }
}
0
Neminda Prabhashwara 6 Май 2020 в 07:46