我是初学Java程序员,我做了一些研究,但我无法理解如何将它应用到我的程序中。
当我运行我的程序时,我得到一个NullPointerException
,因为我输入了第一个IP地址的昵称。为什么呢?
代码中的隔离行是我得到异常的地方。
答案 0 :(得分:5)
您缺少此行(在抛出NullPointerException之前):
ipAddress[i] = new IPAddress();
你应该在之前初始化数组的元素。
答案 1 :(得分:3)
您已经创建了array
的Ip地址,但您从未填写任何IP地址。
此处ipAddress[i].nickname = input.next();
您认为ipAddress[i]
拥有IPAdress
个对象,并尝试将其nickname
字段设置为input.next()
。但是,由于您尚未向其添加任何对象,因此数组将填充默认值null
。
答案 2 :(得分:2)
分配这样的数组时:
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;
}