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

时间:2014-04-19 17:18:15

标签: 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][l].length; m++) {                       
                        s[j][k][l][m] = "("+String.valueOf(j)+","+String.valueOf(k)+","+String.valueOf(l)+","+String.valueOf(m)+")";

我的问题是我必须填充的数组,因为它已经填充了空值和字符串。

{ { { { null, "null", null }, { "full", null }, { "null" }, null }, null }, { { {} } }, { null, { { "full" } } }, {} };     

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

2 个答案:

答案 0 :(得分:1)

在循环的条件中,您可以访问数组的length属性。如果您访问的数组值为null,则无法评估length属性,因此您将获得NPE。 解决方法是,检查null的数组值,并且不要迭代它的值,因为没有任何反正。 例如。撰写s[j][k][l] != null && m < s[j][k][l].length而非m < s[j][k][l].length

答案 1 :(得分:0)

问题在于,当s[j][k][l]null时,尝试分配给s[j][k][l][m]会导致NPE。

这种情况发生在,例如:

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