Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用for循环访问4d数组时出现NullpointerException_Java_Arrays - Fatal编程技术网

Java 使用for循环访问4d数组时出现NullpointerException

Java 使用for循环访问4d数组时出现NullpointerException,java,arrays,Java,Arrays,我需要编写一个代码,通过4d数组将每个元素的坐标写入元素本身。代码非常简单,我对自己说,并写了以下内容: for (int j = 0; j < s.length; j++) { for (int k = 0; k < s[j].length; k++) { for (int l = 0; l < s[j][k].length; l++) { for (int m = 0; m < s[j][k][

我需要编写一个代码,通过4d数组将每个元素的坐标写入元素本身。代码非常简单,我对自己说,并写了以下内容:

 for (int j = 0; j < s.length; j++) {
        for (int k = 0; k < s[j].length; k++) {
            for (int l = 0; l < s[j][k].length; l++) {
                for (int m = 0; m < s[j][k][l].length; m++) {                       
                        s[j][k][l][m] = "("+String.valueOf(j)+","+String.valueOf(k)+","+String.valueOf(l)+","+String.valueOf(m)+")";

因此,我的程序从s[0][0][0][0]开始,上升到s[0][0][3],然后抛出一个NullpointerException。这是我的程序到达数组第四个null(不包括“null”)的时刻,在这里我无法想出解决方案。在我看来,null与其他null没有什么不同,但为什么我的程序停在这里?

问题是,当
s[j][k][l]
null
时,试图分配给
s[j][k][l][m]
会导致NPE

例如,以下情况会发生:

{ { null, "null", null }, { "full", null }, { "null" }, null }
                                                        ^^^^

在循环的条件中,您可以访问数组的
length
属性。如果您访问的数组值为
null
则无法计算
length
属性,因此您将获得一个NPE。 解决方案是,检查数组值的
null
,不要迭代它的值,因为没有任何方法。
例如写
s[j][k][l]!=null&&m
而不仅仅是
m

您需要使用4D数组吗?因为我无法想象自己会选择这样做。@A我只是随大流,伙计。在某些情况下,它们可以被使用,不要因为它而责骂别人。是的,这个数组是给我的,我需要用坐标填充它。好吧,如果这是一个要求,这是一个要求。如果可能的话,我永远不会选择一个四维数组而不是一个包含这些子数组值的一维对象数组……为npe添加一个try-catch语句可以解决这个问题,但它也会在不允许它们完成任务的情况下结束for循环。我需要在catch语句中添加for循环应该从停止的地方继续工作,但我不能用代码编写它,我也不知道是否有可能这样做:O如果该空值与其他空值没有区别,我如何检查这种特殊情况?避免每次迭代中的空值检查(如果数组值不是空值)您可以将
for
循环包装在
if
语句中,如
if(s[j][k][l]!=null){for(int m=0;m
我试图在foor循环中用if语句检查null,但这样说我没有想到。非常感谢!
{ { null, "null", null }, { "full", null }, { "null" }, null }
                                                        ^^^^