Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147

    [java]creazione oggetti da file

    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.
    codice:
    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"

    codice:
    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);

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    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.

  3. #3
    E come si fa a fare questo controllo??? nn sono riuscito a trovare nessun metodo x vedere l'eof. qual'è la procedura?
    la vita è un fulmine ma prenderlo nel culo è un lampo.

  4. #4
    prova con qualcosa tipo:

    codice:
    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);
    }
    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

  5. #5
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147
    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??

  6. #6
    codice:
    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);
    }
    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147
    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??

  9. #9
    Forse con una cosa tipo:

    codice:
    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;
    }

  10. #10
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147
    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

    ???????? :master:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.