chava/Classe.java
2024-12-17 18:08:16 +01:00

145 lines
4.7 KiB
Java

public class Classe {
private Studente[] studenti = new Studente[0];
private Studente[] rappresentanti = new Studente[0];
private Insegnante coordinatore = null;
public void aggiungiStudente(Studente studente) {
if(this.studenti.length >= 4) {
throw new IllegalStateException("Non ci possono essere più di 4 studenti in una classe");
}
if(studente.classe != null) {
throw new IllegalArgumentException("Lo studente " + studente.getNome() + " è già in una classe");
}
Studente[] vecchiaArray = this.studenti;
this.studenti = new Studente[vecchiaArray.length + 1];
// si potrebbe usare System.arraycopy per copiare i valori nell'array più velocemente
for(int i = 0; i < vecchiaArray.length; i++) {
this.studenti[i] = vecchiaArray[i];
}
// vecchiaArray.length == studenti.length - 1
this.studenti[vecchiaArray.length] = studente;
studente.classe = this;
}
public void rimuoivStudente(Studente studente) {
if(this.studenti.length <= 2) {
throw new IllegalStateException("Non ci possono essere meno di 2 studenti in una classe");
}
int indice = -1;
for(int i = 0; i < this.studenti.length; i++) {
if(this.studenti[i] == studente) {
indice = i;
break;
}
}
if(indice == -1) {
throw new IllegalArgumentException("Lo studente " + studente.getNome() + " non è presente nella classe");
}
Studente[] vecchiaArray = this.studenti;
this.studenti = new Studente[this.studenti.length - 1];
for(int i = 0; i < this.studenti.length; i++) {
this.studenti[i] = vecchiaArray[i >= indice ? i+1 : i];
}
studente.classe = null;
}
public void setCoordinatore(Insegnante insegnante) {
if(insegnante.classeCoordinata != null && insegnante.classeCoordinata != this) {
throw new IllegalArgumentException("L'insegnante " + insegnante.getCognome() + " è già coordinatore di un'altra classe");
}
if(this.coordinatore != null) {
this.coordinatore.classeCoordinata = null;
}
this.coordinatore = insegnante;
insegnante.classeCoordinata = this;
}
public Insegnante getCoordinatore() {
return this.coordinatore;
}
public Studente[] getStudenti() {
// creo una copia per evitare che l'array venga modificato inaspettatamente
Studente[] copia = new Studente[this.studenti.length];
for(int i = 0; i < this.studenti.length; i++) {
copia[i] = this.studenti[i];
}
return copia;
}
public Studente[] getRappresentanti() {
Studente[] copia = new Studente[this.rappresentanti.length];
for(int i = 0; i < this.rappresentanti.length; i++) {
copia[i] = this.rappresentanti[i];
}
return copia;
}
public void aggiungiRappresentante(Studente studente) {
if(studente.rappresentante) {
throw new IllegalArgumentException("Lo studente è già un rappresentante");
}
boolean presente = false;
for(int i = 0; i < this.studenti.length; i++) {
if(this.studenti[i] == studente) {
presente = true;
break;
}
}
if(!presente) {
throw new IllegalArgumentException("Lo studente " + studente.getNome() + " non è nella classe");
}
Studente[] vecchiaArray = this.rappresentanti;
this.rappresentanti = new Studente[vecchiaArray.length + 1];
for(int i = 0; i < vecchiaArray.length; i++) {
this.rappresentanti[i] = vecchiaArray[i];
}
this.rappresentanti[vecchiaArray.length] = studente;
studente.rappresentante = true;
}
public void rimuoviRappresentante(Studente studente) {
if(!studente.rappresentante) {
throw new IllegalArgumentException("Lo studente non è un rappresentante");
}
int indice = -1;
for(int i = 0; i < this.rappresentanti.length; i++) {
if(this.rappresentanti[i] == studente) {
indice = i;
break;
}
}
if(indice == -1) {
throw new IllegalArgumentException("Lo studente " + studente.getNome() + " non è rappresentante di questa classe");
}
Studente[] vecchiaArray = this.rappresentanti;
this.rappresentanti = new Studente[vecchiaArray.length - 1];
for(int i = 0; i < this.rappresentanti.length; i++) {
this.rappresentanti[i] = vecchiaArray[i >= indice ? i+1 : i];
}
studente.rappresentante = false;
}
}