Java.NullPointerException null(再次)

Java.NullPointerException null(再次),java,null,nullpointerexception,Java,Null,Nullpointerexception,我在NullPointerException中遇到另一个问题。这次它突出显示了tellen=telno.length()。无论你问什么: 文本文件中有要读取到该变量的数据 所有变量都已初始化 缓冲读取器也被初始化 以下是我的代码片段: while((telno = br.readLine()) != null){ name = br.readLine(); surname = br.readLine(); company = br.readLine();

我在NullPointerException中遇到另一个问题。这次它突出显示了
tellen=telno.length()
。无论你问什么:


  • 文本文件中有要读取到该变量的数据
  • 所有变量都已初始化
  • 缓冲读取器也被初始化
  • 以下是我的代码片段:

    while((telno = br.readLine()) != null){
        name = br.readLine();
    
        surname = br.readLine();
    
        company = br.readLine();
    
        house = br.readLine();
    
        street = br.readLine();
    
        locality = br.readLine();
    
        postcode = br.readLine();
    
        telno = br.readLine();
        tellen = telno.length();
    
        mobno = br.readLine();
    
        sep = br.readLine();
    
        if(tellenx > tellen) tellen = tellenx;
    
    
    }
    
请帮忙。谢谢 文本文件:

  • 名字
  • 公司
  • 房子
  • 街头
  • 地点
  • 电话号码
  • 手机号码
问题出在电话里(泰伦) 所有这些名字都是虚构的,这个程序是一个电话簿

George
Farrugia
Some Company 
9, Flowers
Quail Street
Bubaqra
BBQ 1569
21369854
79825643
--------------------------------------------
Paul
Zammit

9
Bird Street
St. Julians
STJ 0000
21545796
79745247
--------------------------------------------
Peter
Spiteri
Oak Company
Trees
Birch Street
Oakgrove
TRE 3333
21323323
99323323
--------------------------------------------

Zammit
后面的空格是空格。如果没有数据可以避免这样的问题,则会放置此选项。

很可能是文件的结尾,而您的
bufferedReader.readLine()
正在返回null,而您只是在一个实例上调用了一个null的方法,这将导致NPE我猜您正在尝试使用readLine()进行读取如果没有null check.Definitel,它将给出NPE。

添加一个if语句来检查是否有任何null引用,这是检查代码中错误的一个好方法

伪代码中的一个示例是:

   telno = br.readLine();

   if(telno == null)
       System.out.println("this will cause null pointer exception  "+ telno.length()); 
   else
       tellen = telno.length();

导致此错误的原因是,您在一个
循环中读取
11
行,而只能读取
10行

因此,在某个时刻,
br.readLine()
将返回
null

您需要根据需要读取文件,这意味着一次(while循环)读取10行,然后再读取10行,依此类推

while((telno = br.readLine()) != null){ // first line
    name = br.readLine();   // secondline I think this should be first line

    surname = br.readLine();

    company = br.readLine();

    house = br.readLine();

    street = br.readLine();

    locality = br.readLine();

    postcode = br.readLine();

    telno = br.readLine();
    tellen = telno.length();

    mobno = br.readLine();

    sep = br.readLine();  // eleventh line

    if(tellenx > tellen) tellen = tellenx;


}

为什么重复使用readLine()而不进行null检查?请发布null指针异常的堆栈跟踪。它可能提供了一个线索。你能发布一个输入文件的示例吗。你说所有字段都有数据,看到一个示例就好了。你意识到你做了两次
tellno=br.readLine()
,忽略了第一个值,对吗?文本文件中有数据。没有一行是空的。在我添加另一组数据之前,它运行良好。与此相同的字段是程序设计的目的。@markscamilleri在文件末尾,如果没有可读取的内容br.readLine()返回null。尝试过它,当有数据时,它会给我一个NullPointerException。我不知道发生了什么。我想你的意思是说
=
,你还需要删除
if
else
后面的行。谢谢你给我解释。有了你的回答,我设法解决了这个问题。再次感谢。当我得到15个代表积分时,我会投票支持你:)不客气。只是一个建议。下次遇到这个问题时,试着自己调试并找到问题。从长远来看,它将帮助你。如果您使用的是Eclipse,那么实际上,我使用的是BlueJ。坦率地说,我仍在学习“O”级/GCSE同等水平的课程,这就是为什么我在这些方面没有经验。