package lezione08; class StudenteSlide21 { String nome; String cognome; int eta; String matricola; EsameSlide14[] carriera; int next; static int counter = 0; StudenteSlide21(String nome, String cognome, int e) { this.nome = nome; this.cognome = cognome; this.eta = e; this.next = 0; this.matricola = StudenteSlide21.generaMatricola(); this.carriera = new EsameSlide14[30]; } static String generaMatricola() { String matricola = String.valueOf(StudenteSlide21.counter); // equivalente a 'return StudenteSlide16.counter + ""' ma piu' elegante =) StudenteSlide21.counter++; return matricola; // NOTA: NON 'this.matricola' } double calcolaMedia(){ double somma = this.sommaVoti(this.carriera); return somma / this.next; } double sommaVoti(EsameSlide14[] carriera) { double somma = 0; for (int i = 0; i < next; i++) { somma += carriera[i].voto; } return somma; } void registraVoto(String materia, int voto) { EsameSlide14 esame = new EsameSlide14(); esame.materia = materia; esame.voto = voto; this.carriera[this.next] = esame; this.next++; } // niente return, non serve double registraECalcolaMedia(EsameSlide14 esame) { this.registraVoto(esame); return this.calcolaMedia(); } void registraVoto(EsameSlide14 esame) { this.carriera[this.next] = esame; this.next++; } public static void main(String[] args) { StudenteSlide21 s1 = new StudenteSlide21("Stefano", "Mariani", 30); System.out.println("Nome: " + s1.nome); System.out.println("Cognome: " + s1.cognome); System.out.println("Eta': " + s1.eta); EsameSlide14 esame1 = new EsameSlide14(); esame1.materia = "Fondamenti di Informatica"; esame1.voto = 30; s1.registraVoto(esame1.materia, esame1.voto); // Passaggio parametri per valore System.out.println("Materia: " + s1.carriera[0].materia + " Voto: " + s1.carriera[0].voto); System.out.println("Media: " + s1.calcolaMedia()); esame1.materia = "Varie ed eventuali"; esame1.voto = 29; System.out.println("Materia: " + esame1.materia + " Voto: " + esame1.voto); System.out.println("Materia: " + s1.carriera[0].materia + " Voto: " + s1.carriera[0].voto); // Saranno cambiati anche loro o no? EsameSlide14 esame2 = new EsameSlide14(); esame2.materia = "Fisica Tecnica"; esame2.voto = 18; s1.registraECalcolaMedia(esame2); // Passaggio parametri per riferimento System.out.println("Materia: " + s1.carriera[1].materia + " Voto: " + s1.carriera[1].voto); System.out.println("Media aggiornata: " + s1.calcolaMedia()); esame2 = esame1; System.out.println("Materia: " + s1.carriera[1].materia + " Voto: " + s1.carriera[1].voto); // Perchè stampa ancora materia e voto della riga 79? EsameSlide14 esame3 = new EsameSlide14(); esame3.materia = "Basta ti prego"; esame3.voto = 20; EsameSlide14 esame4 = esame3; s1.registraECalcolaMedia(esame3); // Passaggio parametri per riferimento System.out.println("Materia: " + s1.carriera[2].materia + " Voto: " + s1.carriera[2].voto); esame4.materia = "L'ultimo giuro"; esame4.voto = 21; System.out.println("Materia: " + s1.carriera[2].materia + " Voto: " + s1.carriera[2].voto); // Perchè stavolta i valori sono cambiati?? } }