Buongiorno. Sto facendo un esercizio in cui devo creare un programma per la gestione di un registro studenti. So che la StringTokenizer è deprecata, ma me lo richiede l'esercizio quindi la uso lo stesso.
Ho creato parte una classe Studente che si occupa di sovrascrivere il metodo toString e basta per ora. Ogni Studente è identificato da nome cognome e matricola.
Il programma deve leggere dal file archivio.txt nome, cognome e matricola degli studenti e salvarli in un oggetto di tipo studente, che a sua volta io ho deciso di salvare su un ArrayList. SUccessivamente devo stampare il contenuto dell'ArrayList normalmente e al contrario. La parte in cui trasformo ogni singola linea in un token sembra funzionare, ma in output io ottengo la seguente cosa:
Sto iniziando a leggere il file ./archivio.txt
Alfonso Maiorino 743191
Laura Frisone 123455
Silvio Preti 387121
Stefano Manduzio 217389
Ho finito di leggere dal file ./archivio.txt e l'ho chiuso!
[{Nome: Alfonso; Cognome: Maiorino; Matricola: 743191}, {Nome: Alfonso; Cognome: Maiorino; Matricola: 743191}, {Nome: Alfonso; Cognome: Maiorino; Matricola: 743191}, {Nome: Alfonso; Cognome: Maiorino; Matricola: 743191}]
[{Nome: Alfonso; Cognome: Maiorino; Matricola: 743191}, {Nome: Alfonso; Cognome: Maiorino; Matricola: 743191}, {Nome: Alfonso; Cognome: Maiorino; Matricola: 743191;}, {Nome: Alfonso; Cognome: Maiorino; Matricola: 743191;}
L'ArrayList sopra è quello stampato normalmente, quello sotto quello stampato al contrario. Non capisco perchè, pur funzionandomi la tokenizzazione e pur funzionandomi la lettura delle singole linee, quando devo aggiungere gli elementi sull'ArrayList mi mette sempre lo stesso elemento ma quattro volte.
Riporto sotto il codice della classe GestioneRegistro.
codice:public class GestioneRegistro { private String nome = new String(); private String cognome = new String(); private String matricola = new String(); Studente studente = new Studente(nome, cognome, matricola); public ArrayList<Studente> letturaDati(String nomeFileDaLeggere) { BufferedReader reader = null; ArrayList<Studente> elencoStudenti = new ArrayList<Studente>(); try { System.out.println("Sto iniziando a leggere il file " + nomeFileDaLeggere); reader = new BufferedReader(new FileReader(nomeFileDaLeggere)); String linea = reader.readLine(); StringTokenizer st = new StringTokenizer(linea); while (linea != null) { System.out.println(linea); while (st.hasMoreTokens()) { studente.nome = st.nextToken(); studente.cognome = st.nextToken(); studente.matricola = st.nextToken(); } linea = reader.readLine(); elencoStudenti.add(studente); } } catch (FileNotFoundException e) { System.out.println("Non ho trovato il file " + nomeFileDaLeggere); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } } System.out.println("Ho finito di leggere dal file " + nomeFileDaLeggere + " e l'ho chiuso!"); return elencoStudenti; } public void stampaDati(ArrayList<Studente> v) { System.out.println(v); } public void stampaReverse(ArrayList<Studente> v) { Collections.reverse(v); System.out.println(v); } public static void main(String[] args) { GestioneRegistro registro = new GestioneRegistro(); ArrayList<Studente> elenco = registro.letturaDati("./archivio.txt"); registro.stampaDati(elenco); registro.stampaReverse(elenco); } }
Grazie mille a chiunque sia disposto a darmi una mano!