PDA

Visualizza la versione completa : [java]creazione oggetti da file


cielo81
21-12-2004, 21:41
il problema il seguente legato ad un esercizio di prova che stavo facendo per imparare a programmare.
ho la seguente classe studente che non fa altro che creare degli oggetti studenti composti da un campo nome ed uno voto prendendo queste informazioni da un file.

public class Studente {
public Studente(String nome, int media)throws Exception {
this.nome = nome;
this.media = media;
}
public static Studente leggi(BufferedReader br)throws Exception {
String dato;
int voto;
dato = br.readLine();
voto = Integer.parseInt(br.readLine());
System.out.println(dato);
System.out.println(voto);
return new Studente(dato,voto);
}
private String nome;
private int media;
}

ora se mi volgio stampare tutti gli studenti che ho preso dal file se utilizzo il seguente codice con il for funziona perch conosco il numero di elementi da stampare ma se nn conosco il numero di elementi che era presente nel file utilizzando while come faccio?? se utilizzo while nel codice seguente mi da il seguente errore:
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:382)
at java.lang.Integer.parseInt(Integer.java:463)
at esercizi3.Studente.leggi(Studente.java:15)
at esercizi3.Caricare.main(Caricare.java:20)
stampa tutto ci che nel file
Exception in thread "main"


public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("registro.txt")));
Studente stu = Studente.leggi(br);
while (stu != null)
stu = Studente.leggi(br);

pprllo
21-12-2004, 22:10
Nel tuo ciclo tu continui a leggere finche il metodo leggi non ti risponde picche, ma nel metodo stesso non hai inserito un controllo che verificasse il raggiungimento dell'EOF. Risultato ? Il programma continua a leggere fino a che non arriva alla fine, ma quando arriva alla fine invoca il metodo ParseInt su un argomento non valido, e ti da errore.

azz00
22-12-2004, 13:35
E come si fa a fare questo controllo??? nn sono riuscito a trovare nessun metodo x vedere l'eof. qual' la procedura?

Lucis
22-12-2004, 13:59
prova con qualcosa tipo:



String letta = null;
while((letta = br.readLine()) != null) {
String nome = letta;
letta = br.readLine();
int voto = Integer.parseInt(letta);
Studente s = new Studente(nome, voto);
}

:ciauz:

cielo81
23-12-2004, 09:50
Nel tuo ciclo tu continui a leggere finche il metodo leggi non ti risponde picche, ma nel metodo stesso non hai inserito un controllo che verificasse il raggiungimento dell'EOF. Risultato ? Il programma continua a leggere fino a che non arriva alla fine, ma quando arriva alla fine invoca il metodo ParseInt su un argomento non valido, e ti da errore.

e come faccio allora a verificare il raggiungimento dell'EOF??

Lucis
23-12-2004, 14:58
String letta = null;
while((letta = br.readLine()) != null) {
String nome = letta;
letta = br.readLine();
int voto = Integer.parseInt(letta);
Studente s = new Studente(nome, voto);
}

:fighet:

LeleFT
23-12-2004, 15:07
Praticamente Lucis ti sta dicendo, giustamente, che quando il file finito (ossia, quando si incontra l'EOF), il metodo readLine() ritorna una stringa nulla. Quindi, per verificare se si raggiunta la fine del file, sufficiente verificare se la stringa letta nulla.


Ciao. :ciauz:

cielo81
24-12-2004, 11:05
Ciao LeleFT

il problema sta nella condizione while dove cereo gli oggetti studenti non nella lettura di una stringa per creare gli oggetti...
io richiamo la classe studente per creare un oggetto ma come posso utilizzare l'oggetto nella condizione while per far terminare il ciclo??

V1RuZ
24-12-2004, 14:20
Forse con una cosa tipo:



public class Studente {
public Studente(String nome, int media)throws Exception {
this.nome = nome;
this.media = media;
}
public static Studente leggi(BufferedReader br)throws Exception {
String dato;
int voto;
Studente stud = null;
if(((dato = br.readLine()) != null) && (voto = Integer.parseInt(br.readLine()) != null)){

System.out.println(dato);
System.out.println(voto);
stud = new Studente(dato,voto);
}
return stud;
}
private String nome;
private int media;
}

cielo81
25-12-2004, 11:41
ho provato V1Ruz il tuo codice ma mi da questi due errori

"Studente.java": Error #: 300 : method !=(int, null) not found in class esercizi2.Studente at line 17, column 83"

"Studente.java": Error #: 375 : operator && cannot be applied to (boolean, int) at line 17, column 39

???????? :dh: :messner: :master:

Loading