/** * la classe gestisce un archivio che contiene informazioni relative a studenti * * @author Adriano Luchetta * @version 03-Nov-2005 * @version 12-Nov-2004 */ import java.util.Scanner; import java.util.NoSuchElementException; public class ArchivioStudenti2 { // parte privata private static final char CHAR_COMMENTO = '*'; private Studente[] studente; private int studenteSize; // parte pubblica /** costruttore: inizializza un archivio vuoto. */ public ArchivioStudenti2() { studente = new Studente[1]; studenteSize = 0; } /** costruttore: inizializza un archivio, acquisendo i dati da oggetto di classe Scanner @param reader oggetto di classe Scanner */ public ArchivioStudenti2(Scanner reader) { // invocazione costruttore precedente this(); // 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 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; String matr; nome = st.next(); matr = st.next(); // istanza di un oggetto 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); } aggiungi(stud); } reader.close(); } /** aggiunge all'archivio uno studente @param unoStudente lo studente da aggiungere */ public void aggiungi(Studente unoStudente) { // 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 @throws java.util.NoSuchElementException se l'archivio e' vuoto */ public Studente rimuovi() { // verifica se l'archivio e' vuoto if (isEmpty()) throw new NoSuchElementException(); // 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; } }