/** * Questo programma implementa vari metodi che sfruttano la classe Studente, ed un metodo main che * li utilizza. */ public class P1ProgrammiStudente { /** * Questo metodo semplifica la creazione di un oggetto di tipo Studente. In senso esteso, si * potrebbe dire che è un costruttore, sebbene nella programmazione ad oggetti sia consueto * chiamare costruttore un costrutto specifico che esula dal programma di questo corso. */ public static Studente creaStudente(String nome, String cognome, int eta, boolean italiano) { Studente s = new Studente(); s.nome = nome; s.cognome = cognome; s.eta = eta; s.italiano = italiano; return s; } /** * Anche questo metodo semplifica la creazione di un oggetto, ma è specializzata per studenti * italiani. Infatti, non ha un parametro di input che specifica se uno studente è italiano o * meno, ma setta il campo italiano dell'oggetto s sempre a true. */ public static Studente creaStudenteItaliano(String nome, String cognome, int eta) { Studente s = new Studente(); s.nome = nome; s.cognome = cognome; s.eta = eta; s.italiano = true; return s; } /** * Variante di creaStudenteItaliano che riutilizza la funzione creaStudente invece di essere * riscritta da capo. */ public static Studente creaStudenteItaliano2(String nome, String cognome, int eta) { return creaStudente(nome, cognome, eta, true); } /** * Metodo che stampa in maniera leggibile un oggetto di tipo Studente. Ricordiamo infatti che * usare System.out.print per stampare un oggetto visualizza l'indirizzo in memoria in cui * l'oggetto risiede e non i il contenuto dei campi. */ public static void stampaStudente(Studente s) { System.out.print(s.nome + " " + s.cognome + " di anni " + s.eta); if (s.italiano) System.out.println(" (italiano)"); else System.out.println(" (straniero)"); } /** * Metodo che prende un array di studenti e un valore intero "etaMinima", e restituise un nuovo * array che contiene solo gli studenti la cui età è superiore ad "etaMinima". */ public static Studente[] trovaStudentiAnziani(Studente[] studenti, int etaMinima) { /* * Non sapendo quanti sono gli studenti con età superiore ad "etaMinima", la prima cosa che * faccio è contarli. */ int conteggio = 0; for (Studente s : studenti) { if (s.eta >= etaMinima) conteggio++; } /* * Ora che li ho contati, so quanto deve essere grande l'array da creare per il risultato. */ Studente[] studentiAnziani = new Studente[conteggio]; /* * Adesso scandisco di nuovo l'array studenti e, mano a mano che trovo studenti "anziani", * li inserisco nell'array creato sopra. */ int conteggio2 = 0; for (Studente s : studenti) { if (s.eta >= etaMinima) { studentiAnziani[conteggio2] = s; conteggio2++; } } return studentiAnziani; } public static void main(String[] args) { Studente s1 = creaStudenteItaliano("Paolo", "Rossi", 42); Studente s2 = creaStudente("John", "White", 56, false); Studente s3 = creaStudenteItaliano("Mario", "Verdi", 55); Studente[] studenti = {s1, s2, s3}; Studente[] studentiAnziani = trovaStudentiAnziani(studenti, 50); System.out.println("Lista di studenti anziani"); for (Studente s : studentiAnziani) stampaStudente(s); } }