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

Java 为什么我的输入中会出现NullPointerException?,java,class,nullpointerexception,Java,Class,Nullpointerexception,我是一名java程序员,我做了一些研究,但我不知道如何将其应用到我的程序中 当我运行我的程序时,当我输入第一个IP地址的昵称时,我会得到一个NullPointerException。为什么? 代码中的孤立行是我得到异常的地方。当您分配这样的数组时: IPAddress[] ipAddress = new IPAddress[2]; 它创建了一个包含两个插槽的数组,但两个插槽都有null。在将其用作对象之前,您需要在每个插槽中放置一些内容: ipAddress[i] = new IPAddres

我是一名java程序员,我做了一些研究,但我不知道如何将其应用到我的程序中

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


代码中的孤立行是我得到异常的地方。

当您分配这样的数组时:

IPAddress[] ipAddress = new IPAddress[2];
它创建了一个包含两个插槽的数组,但两个插槽都有null。在将其用作对象之前,您需要在每个插槽中放置一些内容:

ipAddress[i] = new IPAddress();
ipAddress[i].nickname = input.next();
在本地_地址内,您将获得另一个NPE。您最初将结果设置为null,而不为其分配数组。这就是为什么你会得到NPE。您可以通过以下方法解决此问题:

String[][] result = new String[addr.length][]; // instead of null
但是,您还需要为j的每个值分配一个字符串[]。如果你不知道计数会增长,你可以考虑使用一个可以自动增长的列表。 顺便说一句:我不知道你想完成什么,但你的逻辑看起来不正确。您真的需要二维字符串数组吗?看起来这应该是你想要的:

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

当您分配这样的数组时:

IPAddress[] ipAddress = new IPAddress[2];
它创建了一个包含两个插槽的数组,但两个插槽都有null。在将其用作对象之前,您需要在每个插槽中放置一些内容:

ipAddress[i] = new IPAddress();
ipAddress[i].nickname = input.next();
在本地_地址内,您将获得另一个NPE。您最初将结果设置为null,而不为其分配数组。这就是为什么你会得到NPE。您可以通过以下方法解决此问题:

String[][] result = new String[addr.length][]; // instead of null
但是,您还需要为j的每个值分配一个字符串[]。如果你不知道计数会增长,你可以考虑使用一个可以自动增长的列表。 顺便说一句:我不知道你想完成什么,但你的逻辑看起来不正确。您真的需要二维字符串数组吗?看起来这应该是你想要的:

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();

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

在引发NullPointerException之前缺少这一行:

ipAddress[i] = new IPAddress();
您应该在之前初始化数组的元素。

您已经创建了一个Ip地址数组,但从未填写过任何Ip地址

此处为ipAddress[i]。昵称=input.next;假设ipAddress[i]包含一个ipAddress对象,并尝试将其昵称字段设置为input.next。但是,由于您没有向数组中添加任何对象,因此该数组将使用默认值null填充

您创建了一个Ip地址数组,但从未填写过任何Ip地址


此处为ipAddress[i]。昵称=input.next;假设ipAddress[i]包含一个ipAddress对象,并尝试将其昵称字段设置为input.next。但是,由于您没有向数组中添加任何对象,因此该数组将使用默认值null填充

我说不出你隔离了哪条线。任何时候出现错误,比如java异常,都可以发布整个过程。里面有很多你没有给我们的信息。顺便说一句,您对&的所有使用可能都应该是&;两者在java中都是合法的操作符,但含义不同。对不起@arcy,我试图让这句话尽可能引人注目。另外,这是完整的代码。代码被注释来解释我的每一个动作。谢谢你。我将根据合法操作员提示进行更改。我不知道您隔离了哪条线路。任何时候出现错误,比如java异常,都可以发布整个过程。里面有很多你没有给我们的信息。顺便说一句,您对&的所有使用可能都应该是&;两者在java中都是合法的操作符,但含义不同。对不起@arcy,我试图让这句话尽可能引人注目。另外,这是完整的代码。代码被注释来解释我的每一个动作。谢谢你。我将根据“合法运算符”提示进行更改。@ShacoNotFound404在运行生成Ipaddress对象的构造函数之前,您不能赋值。新的IPAddress[2]并没有生成对象,它只是为它们占用空间。因此,在更改它们的状态、值等之前,必须先创建它们。@ShacoNotFound404在运行生成Ipaddress对象的构造函数之前,不能指定值。新的IPAddress[2]并没有生成对象,它只是为它们占用空间。因此,在更改它们的状态、值等之前,必须先创建它们。