我需要编写一个代码,该代码通过一个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无异,但为什么我的程序停在这里?
答案 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 }
^^^^