Создать приложение с 2 параметрами. 1 параметр задает количество cтудентов, 2-ой параметр задает количество преподавателей. каждый преподаватель строго по очереди приглашает любого студента. Как только студент получает приглашение , то поток студент заканчивается. Преподаватель становится после этого последним в очереди преподавателей на вызов студента . Потоки - преподаватели должны работать строго по очереди. Работа продолжается пока есть хоть один студент и если число преподавателей больше нуля. Использовать ограничения из задания 3. Выводить на дисплей имя преподавателя вместе с именем студента. Выглядеть это будет примерно так: преподаватель1- студент3 преподаватель2- студент1 преподаватель1- студент4 преподаватель2- студент2
Я сижу уже три вечера над этой задачей. Мб кто знает, что взять за разделённую переменную и как организовать классы, чтобы это работало, как просят?
Я думаю, что нужно создать класс Журнал, разделить его объект между потоками студент и преподаватель и записывать в privat string Журнала. Но как организовать параллельную очередь?
UPD:
Я реализовал просто очередь. Она работает не параллельно. Нужно чтобы они выводились не по порядку. А рандомно (из-за работы планировщика)
Class Audience:
public class Audience {
private int amountOfLecturers;
private int amountOfStudents;
Queue<Lecturer> lecturers;
Queue<Student> students;
public Audience() {
this.lecturers = new LinkedList<Lecturer>();
this.students = new LinkedList<Student>();
}
public Audience(int amountOfLecturers, int amountOfStudents) {
this.amountOfLecturers = amountOfLecturers;
this.amountOfStudents = amountOfStudents;
this.lecturers = new LinkedList<Lecturer>();
this.students = new LinkedList<Student>();
//Assigned name to lecturer
for (int i = 0; i < amountOfLecturers; i++) {
Lecturer lect = new Lecturer("Lecturer " + (i + 1));
lecturers.add(lect);
}
//Assigned name to student
for (int i = 0; i < amountOfStudents; i++) {
Student stud = new Student("Student " + (i + 1));
students.add(stud);
}
}
public String queue() {
String queueStatus = new String();
Iterator<Student> iter = students.iterator();
while (iter.hasNext()) {
lecturers.add(lecturers.element());
queueStatus =
queueStatus +
"\n" +
lecturers.poll().inviteStudent(students.poll())
;
}
return queueStatus;
}
}
Class Lecturer:
public class Lecturer implements Runnable {
String name;
public Lecturer() {
}
public Lecturer(String name) {
this.name = name;
}
public void setName(String nameFromOut) {
this.name = nameFromOut;
}
public String getName() {
return this.name;
}
public String inviteStudent(Student student) {
String pair;
pair = this.name + ": " + student.getName();
return pair;
}
public void run() {
}
}
Class Student:
public class Student {
String name;
public Student() {
}
public Student(String nameFromOut) {
this.name = nameFromOut;
}
public void setName(String nameFromOut) {
this.name = nameFromOut;
}
public String getName() {
return this.name;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
я наконец разобрался, с блоками, теперь вопрос в другом, как сделать проверку блока, жму на кнопку, появляется правильный блок, жму на кнопу...