Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Ultime righe vuote di un file

    Salve.
    Ho questo codice che deve leggere delle righe da un file:

    codice:
    File studente = new File(unico[i]+".txt");
    
        stud = new BufferedReader( new InputStreamReader(new FileInputStream(studente)));
        nume=0;
        while ((stud.readLine()!=null) || (stud.readLine()==""))
      nume++;
        stud = new BufferedReader( new InputStreamReader(new FileInputStream(studente)));
        
        for (j=0; j<nume; j++){
        esami[j]=stud.readLine();
        System.out.println(j);
    
        
        String[] esame = esami[j].split("\\,");
        
        String voto = esame[2];
        String vo = voto.substring(1,voto.length());
        
        vot=Integer.parseInt(vo);
        
        
        
        System.out.println("voto"+vot);
        temp.esameSuperato(vot);
        
        numEsami = temp.getNumeroEsamiSuperati();
        media = temp.getMedia();
        temp.stampaStudente(unPS); 
    }
    Il problema è che se uno di quei file in cui vado a leggere ha delle righe vuote alla fine, mi restituisce questo errore:
    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    	at homework1.Testudente.main(Testudente.java:84)
    Come devo fare?

  2. #2
    Anche io ho un problema simile.
    Ragazzi come si fa?

    Credo quando incontra la linea vuota, fare la split e inutile. Quindi esame[2] non esiste.
    E' questo il problema vero?

    Come si risolve?

    Grazie. Ciao

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Il problema sta nell'utilizzo di un operatore di confronto non valido:
    codice:
    while ((stud.readLine()!=null) || (stud.readLine()==""))
    Non si usa l'operatore == con gli oggetti: il confronto con == avviene tra indirizzi!!
    Si usa il metodo equals():
    codice:
    while ((stud.readLine()!=null) || (!stud.readLine().equals("")))
    Inoltre, vorrei farti notare che in questo modo perdi di volta in volta una riga!
    Ciascuna chiamata al metodo readLine() legge una riga dal file: mettendo due volte questo metodo, leggi due volte dal file, quindi l'elaborazione salta sempre la prima riga letta (e tutte le righe in posizione dispari).
    Prima si legge la riga e la si salva in una variabile, poi si testa il valore di questa variabile, senza andare a leggere nuovamente il file.


    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

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.