import java.util.Arrays; class Student { private static final int MAX_SIZE = 20; private static final String NONE = "<Κενό>"; private static int amCounter = 0; private final int am; private String firstName = NONE; private String lastName = NONE; private int age = -1; // 15-18 private ClassRoom classRoom; public Student(String firstName, String lastName, int age) { am = ++amCounter; if (isNameValid(firstName)) { this.firstName = firstName.trim(); } if (isNameValid(lastName)) { this.lastName = lastName.trim(); } if (isAgeValid(age)) { this.age = age; } } public int getAm() { return am; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = isNameValid(firstName) ? firstName.trim() : NONE; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = isNameValid(lastName) ? lastName.trim() : NONE; } public int getAge() { return age; } public void setAge(int age) { this.age = isAgeValid(age) ? age : -1; } public ClassRoom getClassRoom() { return classRoom; } void setClassRoom(ClassRoom classRoom) { this.classRoom = classRoom; } @Override public String toString() { return "Student{" + "am=" + am + ", firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + ", classRoom=" + classRoom + '}'; } private boolean isAgeValid(int inAge) { return inAge >= 15 && inAge <= 18; } private boolean isNameValid(String name) { return name != null && !name.isBlank() && name.length() <= MAX_SIZE; } } class ClassRoom { private static final int DEFAULT_SIZE = 30; private static final String NO_CLASSROOM = "--"; private static final int CLASSROOM_NAME_LENGTH = 2; private final String name; private final int size; private Student[] students; private int index = 0; public ClassRoom(String name, int size) { this.name = isClassRoomNameValid(name) ? name : NO_CLASSROOM; this.size = isSizeValid(size) ? size : DEFAULT_SIZE; this.students = new Student[size]; } public ClassRoom(String name) { this(name, DEFAULT_SIZE); } public String getName() { return name; } public int getSize() { return size; } public void addStudent(Student student) { if (student != null && index < size) { students[index++] = student; student.setClassRoom(this); } } public void removeStudent(int am) { int indx = contains(students, am); if (indx != -1) { Student student = students[indx]; if (remove(indx)) { student.setClassRoom(null); } } } public void removeStudent(Student student) { if (student != null) { removeStudent(student.getAm()); } } public void removeAllStudents() { for (Student student : students) { student.setClassRoom(null); } Arrays.fill(students, null); index = 0; } private int contains(Student[] students, int am) { for (int i = 0; i < students.length; i++) { Student student = students[i]; if (student.getAm() == am) { return i; } } return -1; } private boolean remove(int indx) { if (indx < 0 || indx >= this.students.length) return false; Student[] newStudents = new Student[this.students.length - 1]; // αντιγραφή από το 0 μέχρι το students[index-1] System.arraycopy(this.students, 0, newStudents, 0, indx); // αντιγραφή από students[index+1] μέχρι students[students.length-1] System.arraycopy(this.students, indx + 1, newStudents, indx, this.students.length - indx - 1); this.students = newStudents; index--; return true; } @Override public String toString() { return "ClassRoom{" + "name=" + name + ", size=" + size + ", numOfStudents=" + index + '}'; } private boolean isSizeValid(int inSize) { return inSize >= 10 && inSize <= DEFAULT_SIZE; } private boolean isClassRoomNameValid(String classRoom) { return classRoom != null && !classRoom.isBlank() && classRoom.length() == CLASSROOM_NAME_LENGTH && (classRoom.startsWith("Α") || classRoom.startsWith("Β") || classRoom.startsWith("Γ")) && classRoom.charAt(1) >= '1' && classRoom.charAt(1) <= '9'; } } public class School { private static final ClassRoom[] classRooms = { new ClassRoom("Α1"), new ClassRoom("Α2", 28), new ClassRoom("Α3", 25), new ClassRoom("Β1"), new ClassRoom("Β2", 28), new ClassRoom("Β3", 25), new ClassRoom("Γ1"), new ClassRoom("Γ2", 26), new ClassRoom("Γ3", 22), }; public static void main(String[] args) { System.out.println("=== Create student ioannis ===="); Student ioannis = new Student("Γιάννης", "Αντεκοτούμπο", 16); System.out.println("AM: " + ioannis.getAm()); System.out.println("ClassRoom: " + ioannis.getClassRoom()); System.out.println("\n=== Add student ioannis to classroom 'B1' ===="); classRooms[3].addStudent(ioannis); System.out.println(ioannis.getClassRoom()); System.out.println(ioannis); System.out.println("\n=== Create student aliki and add to classroom 'B1' ===="); Student aliki = new Student("Αλίκη", "Βουγιουκλάκη", 17); classRooms[3].addStudent(aliki); System.out.println(aliki); System.out.println(classRooms[3]); System.out.println("\n=== Remove student ioannis from classroom 'B1' ===="); classRooms[3].removeStudent(ioannis.getAm()); System.out.println(ioannis); System.out.println(classRooms[3]); } }