2016-03-30 7 views
0

Bu hatayı kodumda alıyorum ve tamsayı ile bir sayı olmaması gerektiğini biliyorum, ancak bunu nasıl düzelteceğime emin değilim. Eminim bu çok basit ama ben de mümkün olabildiğince takdir ediyorum. Bu arada bir döngüde yapılmalı. Bir süre daha iyi olacağını biliyorum.java.lang.NumberFormatException: null - bir do döngüsünde

Gerekli bilgileri içeren kod parçaları burada verilmiştir. Teşekkür ederim.

String firstName, surname, id; 
    int luckynumber, lockernumber, grade, age; 
    char grade2; 

    try { 
     BufferedReader filein = new BufferedReader(new FileReader(new File(
       "studentdetails.txt"))); 
     do { 
      id = filein.readLine(); 
      firstName = filein.readLine(); 
      surname = filein.readLine(); 
      age = Integer.parseInt(filein.readLine()); 
      grade = Integer.parseInt(filein.readLine()); 
      lockernumber = Integer.parseInt(filein.readLine()); 
      age = 2010 - age; 

     } while (id != null); 

     filein.close(); 


    } catch (FileNotFoundException fnfe) { 
     System.out.println(fnfe); 
    } catch (NumberFormatException nfe) { 
     System.out.print(nfe); 
    } catch (IOException e) { 
     System.out.print(e); 
    } 

Düzen - Bu ancak yaklaşık 10 kişi ile okunur dosyasıdır. Her kelime/sayı dosyadaki kendi satırındadır. sizin için id kontrol ederek dosyanın sonuna gelmiş eğer kontrol ediyoruz

do { 
    id = filein.readLine(); 
    //do more stuff 
} while(id != null); 

: aynı zamanda bir NumberFormatException davanızı dikkate tetikleyebilecek boş satır içermez dosyasını ele alalım

261 
Patricia 
Halangahu 
1974 
92 
56 
+0

biz okumakta olduğunuz dosyanın içeriğini bilmiyoruz. – Stultuske

+1

'un içeriğini kontrol et "studentdetails.txt" adresindeki içeriğin bir örneğini ekleyebilir misiniz? – Matthijs

+0

'studentdetails.txt' ve' stackTrack' ilk önce ekleyiniz Sadece size yardımcı olacağız –

cevap

0

boş olma. Ancak, id boşsa, yinelemeyi hala tamamlıyorsunuz ve ayrıştırmalar başarısız oluyor (dosya sonuna zaten ulaştınız, bu nedenle age = Integer.parseInt(filein.readLine()); ne yapmalı?).

Peki bunu nasıl çözersiniz? Tek yönlü sağ id okuduktan sonra bir çek eklemek olacaktır:

do { 
    id = filein.readLine(); 
    if(id == null) { 
    //end of stream, stop iteration 
    break; 
    } 

    //do more stuff 

} while(true); //you're breaking the loop from the inside already 
+0

Bunun yerine "yedi" yazabilir "7" – Stultuske

+0

@Stultuske Evet bu mümkün olurdu ama ben sadece şu soruya cevap veriyorum ve kasıtlı olarak olası her hatayı kaplamıyorum (örneğin, 'id' için bir satır da olabilir ama bundan sonra başka satır yoktur -> "bozuk" dosya da). – Thomas

+0

Sorunu çözdüğünüz ve hala doğru çıkışı aldığım için teşekkürler, teşekkürler, bana yardımcı olmak için zaman ayırdığınız için teşekkür ederim :) – michael