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!