为什么我在我的输入中得到NullPointerException?

问题描述:

我是一个初学java程序员,我做了一些研究,但我不明白如何将它应用到我的程序。为什么我在我的输入中得到NullPointerException?

当我运行我的程序时,我得到一个NullPointerException,因为我输入第一个IP地址的昵称。为什么?

代码中的隔离行是我得到异常的地方。

+2

我不能说出你“孤立”了什么。任何时候你有一个错误,就像一个Java异常,发布整个事情。它有很多你没有给我们的信息。顺便说一下,“&”的所有用法可能都是“&&”。在java中都是合法的运算符,但意味着不同的东西。 – arcy 2014-10-05 23:08:46

+0

对不起@arcy,我试图让线条尽可能地显眼。此外,这是整个代码。并且代码被评论来解释我的每一个行动。并感谢你。我会根据合法的操作员提示进行更改。 – ShacoNotFound404 2014-10-05 23:12:21

当您分配一个数组是这样的:

IPAddress[] ipAddress = new IPAddress[2]; 

它创建了两个插槽的数组,但两者的插槽有null。你需要把东西在每个时隙之前,你可以使用它作为一个对象:

ipAddress[i] = new IPAddress(); 
ipAddress[i].nickname = input.next(); 

local_address你去找其他的NPE。您最初将result设置为null,并且不要为其指定数组。这就是你获得NPE的原因。你可以解决这个问题:

String[][] result = new String[addr.length][]; // instead of null 

但是,你也将需要分配String[]j每个值。如果您不知道count会变成什么样子,您可以考虑使用可自动增长的List<String>

顺便说一句:我不知道你要完成什么,但是你的逻辑看起来不正确。你真的需要一个二维String数组吗?看起来这应该是你想要什么:

static List<String> local_address(IPAddress addr[]) { 
    List<String> result = new LinkedList<>(); 
    for (int j = 0; j < addr.length; j++) { 
     IPAddress test = addr[j]; 
     if (test.xx == addr[j + 1].xx & test.yy == addr[j + 1].yy) { 
      result.add(addr[j + 1].nickname; 
     } 
    } 
    return result; 
} 

你缺少这一行(抛出NullPointerException异常前):

ipAddress[i] = new IPAddress(); 

你应该之前初始化数组的元素。

+1

@ ShacoNotFound404在运行构建Ipaddress对象的构造函数之前,您不能分配您的值。新的IPAddress [2]没有成为对象,它只是占用空间。所以你必须在他们改变他们的状态,价值观之前制造他们。 – daredesm 2014-10-05 23:13:46

您已创建IP地址的array,但您从未填入任何IP地址。

这里ipAddress[i].nickname = input.next();你认为ipAddress[i]持有IPAdress对象,并尝试其nickname字段设置为input.next()。但由于您尚未向其中添加任何对象,因此数组中填充的默认值为null