/** * la classe gestisce un archivio che contiene informazioni relative a studenti * * @author Adriano Luchetta * @version 09-Nov-2007 * @version 03-Nov-2005 * @version 12-Nov-2004 * @see Studente.java */ import java.util.Scanner; public class ArchivioStudenti { // parte privata private static final char CHAR_COMMENTO = '*'; private Studente[] studente; private int studenteSize; // parte pubblica /** costruttore: inizializza un archivio vuoto. */ public ArchivioStudenti() { studente = new Studente[1]; studenteSize = 0; } /** costruttore: inizializza un archivio, acquisendo i dati tramite il parametro di classe Scanner @param reader oggetto di classe Scanner @throws IllegalArgumentException se il parametro vale null */ public ArchivioStudenti(Scanner reader) { // invocazione costruttore precedente this(); // pre-condizione if (reader == null) throw new IllegalArgumentException(); // lettura dati da file di input int count = 0; while (reader.hasNextLine()) { count++; String line = reader.nextLine(); /* passa alla riga successiva, se la riga e' vuota, oppure se il primo carattere della riga identifica un commento */ if (line.length() == 0 || line.charAt(0) == CHAR_COMMENTO) continue; Scanner st = new Scanner(line); st.useDelimiter("[/]+"); String nome = st.next(); String matr = st.next(); // istanza di un esemplare di classe Studente Studente stud = new Studente(nome, matr); while (st.hasNext()) { Scanner st2 = new Scanner(st.next()); Esame esame = new Esame(st2.next(), st2.nextInt()); stud.aggiungiEsame(esame); st2.close(); } aggiungi(stud); st.close(); } } /** aggiunge all'archivio uno studente @param unoStudente lo studente da aggiungere @throws IllegalArgumentException se il parametro vale null */ public void aggiungi(Studente unoStudente) { if (unoStudente == null) throw new IllegalArgumentException(); // stampa per debugging //System.out.println("aggiungo: " + unoStudente); // ridimensionamento dinamico dell'array if (studenteSize >= studente.length) { Studente[] newStudente = new Studente[2 * studente.length]; for (int i = 0; i < studente.length; i++) newStudente[i] = studente[i]; studente = newStudente; } // inserimento nuovo studente studente[studenteSize] = unoStudente; studenteSize++; } /** verifica se l'archivio e' vuoto @return true se l'archivio e' vuoto, false altrimenti */ public boolean isEmpty() { return studenteSize == 0; } /** rimuove il primo elemento dell'archivio. Il metodo non altera l'ordine degli oggetti dell'array. @return l'elemento rimosso se il contenitore non e' vuoto, null altrimenti dovrebbe generare l'eccezione NoSuchElementException se il metodo viene invocato quando l'archivio e' vuoto, ma non sappiamo ancora generare un eccezione! */ public Studente rimuovi() { // verifica se l'archivio e' vuoto if (isEmpty()) return null; // stampa per debugging //System.out.println("rimuovo: " + studente[0]); // memorizzzione temporanea Studente tmpStud = studente[0]; // spostamento dati for (int i = 0; i < studenteSize - 1; i++) studente[i] = studente[i + 1]; // decremento numero di elementi studenteSize--; return tmpStud; } /** restituisce una stringa che contiene i dati degli studenti memorizzati nell'archivio. @return i dati contenuti nell'archivio */ public String toString() { String str = ""; for (int i = 0; i < studenteSize; i++) str = str + studente[i]; return str; } }