为什么我在我的输入中得到NullPointerException?
我是一个初学java程序员,我做了一些研究,但我不明白如何将它应用到我的程序。为什么我在我的输入中得到NullPointerException?
当我运行我的程序时,我得到一个NullPointerException
,因为我输入第一个IP地址的昵称。为什么?
代码中的隔离行是我得到异常的地方。
当您分配一个数组是这样的:
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();
你应该之前初始化数组的元素。
@ 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
。
我不能说出你“孤立”了什么。任何时候你有一个错误,就像一个Java异常,发布整个事情。它有很多你没有给我们的信息。顺便说一下,“&”的所有用法可能都是“&&”。在java中都是合法的运算符,但意味着不同的东西。 – arcy 2014-10-05 23:08:46
对不起@arcy,我试图让线条尽可能地显眼。此外,这是整个代码。并且代码被评论来解释我的每一个行动。并感谢你。我会根据合法的操作员提示进行更改。 – ShacoNotFound404 2014-10-05 23:12:21