package lezione08; public class StudenteSlide25 { // PUBLIC private String nome; // PRIVATE private String cognome; // PRIVATE private int eta; // PRIVATE private String matricola; // PRIVATE private EsameSlide25[] carriera; // PRIVATE private int next; // PRIVATE private static int counter = 0; // PRIVATE public StudenteSlide25(String nome, String cognome, int e) { // PUBLIC this.nome = nome; this.cognome = cognome; this.eta = e; this.next = 0; this.matricola = StudenteSlide25.generaMatricola(); this.carriera = null; this.carriera = new EsameSlide25[30]; } private static String generaMatricola() { // PRIVATE: non e' opportuno che altri oggetti possano usare questo metodo! String matricola = String.valueOf(StudenteSlide25.counter); // equivalente a 'return StudenteSlide16.counter + ""' ma piu' elegante =) StudenteSlide25.counter++; return matricola; // NOTA: NON 'this.matricola' } public double calcolaMedia(){ // PUBLIC: e' un servizio che offriamo agli altri oggetti double somma = this.sommaVoti(this.carriera); return somma / this.next; } private double sommaVoti(EsameSlide25[] carriera) { // PRIVATE: e' un metodo comodo per implementarne un altro, ma non utile all'esterno double somma = 0; for (int i = 0; i < next; i++) { somma += carriera[i].getVoto(); } return somma; } public void registraVoto(String materia, int voto) { EsameSlide25 esame = new EsameSlide25(); esame.setMateria(materia); esame.setVoto(voto); this.carriera[this.next] = esame; this.next++; } public double registraECalcolaMedia(EsameSlide25 esame) { this.registraVoto(esame); return this.calcolaMedia(); } public void registraVoto(EsameSlide25 esame) { this.carriera[this.next] = esame; this.next++; } public static void main(String[] args) { StudenteSlide25 s1 = new StudenteSlide25("Stefano", "Mariani", 30); System.out.println("Nome: " + s1.nome); System.out.println("Cognome: " + s1.cognome); System.out.println("Eta': " + s1.eta); EsameSlide25 esame1 = new EsameSlide25(); esame1.setMateria("Fondamenti di Informatica"); esame1.setVoto(30); s1.registraVoto(esame1.getMateria(), esame1.getVoto()); // Passaggio parametri per valore System.out.println("Materia: " + s1.carriera[0].getMateria() + " Voto: " + s1.carriera[0].getVoto()); System.out.println("Media: " + s1.calcolaMedia()); esame1.setMateria("Varie ed eventuali"); esame1.setVoto(29); System.out.println("Materia: " + esame1.getMateria() + " Voto: " + esame1.getVoto()); System.out.println("Materia: " + s1.carriera[0].getMateria() + " Voto: " + s1.carriera[0].getVoto()); // Saranno cambiati anche loro o no? EsameSlide25 esame2 = new EsameSlide25(); esame2.setMateria("Fisica Tecnica"); esame2.setVoto(18); s1.registraECalcolaMedia(esame2); // Passaggio parametri per riferimento System.out.println("Materia: " + s1.carriera[1].getMateria() + " Voto: " + s1.carriera[1].getVoto()); System.out.println("Media aggiornata: " + s1.calcolaMedia()); esame2 = esame1; System.out.println("Materia: " + s1.carriera[1].getMateria() + " Voto: " + s1.carriera[1].getVoto()); // Perchè stampa ancora materia e voto della riga 79? EsameSlide25 esame3 = new EsameSlide25(); esame3.setMateria("Basta ti prego"); esame3.setVoto(20); EsameSlide25 esame4 = esame3; s1.registraECalcolaMedia(esame3); // Passaggio parametri per riferimento System.out.println("Materia: " + s1.carriera[2].getMateria() + " Voto: " + s1.carriera[2].getVoto()); esame4.setMateria("L'ultimo giuro"); esame4.setVoto(21); System.out.println("Materia: " + s1.carriera[2].getMateria() + " Voto: " + s1.carriera[2].getVoto()); // Perchè stavolta i valori sono cambiati?? } }