Метод передачи объектов класса в список в другом классе - PullRequest
0 голосов
/ 06 мая 2020

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

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
}

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Один синтаксически правильный способ добиться этого - добавить 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)); Замечания

  • Вам не нужно заключать аргументы в (), например, Group group1 = new Group(21, (student1)); можно записать как Group group1 = new Group(21, student1);
  • Геттеры не должны иметь logi c, а возвращать только объект
0 голосов
/ 06 мая 2020

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

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

Для класса Faculty эта идея подойдет.

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

Базовый c структура для вашего 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, как вы sh. Генерация учеников как вы sh, с помощью цикла или как sh.

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

      }

    }

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...