为什么我的输入中出现NullPointerException?

时间:2014-10-05 23:05:48

标签: java class nullpointerexception

我是初学Java程序员,我做了一些研究,但我无法理解如何将它应用到我的程序中。

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

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

3 个答案:

答案 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;
}