所以我的问题是这里有这个方法:
public static String[][][][] inflate(String[][][][] f) {
for (int i = 0; i <= f.length; i++) {
for (int j = 0; j <= f[i].length; j++) {
for (int k = 0; k <= f[i][j].length; k++) {
for (int l = 0; l <= f[i][j][k].length; l++) {
if (f[i][j][k][l] != null) {
f[i][j][k][l] = "/" + (l) + "|" + (k) + "|" + (j) + "|" + (i) + "\";
}
}
}
}
}
return f;
}
正如标题所说,给定了一个名为f的4维字符串数组,其中已经有一些null值。现在我想遍历这个数组,我总是检查对象是否为null,如果不是,我想用给定的String填充它。但我在这里的问题是,我得到了一个NullPointerException
,因为在某个时候,我的方法有k = 3
,因为我的数组的长度也计入空值。这将导致此异常,因为带有k = 3
的f[i][j][k][l]
根本不存在。那么,我该如何处理想要迭代它的问题,但同时我觉得我不能使用f.length
作为终止条件。
如果需要的话,我可以提供更多的信息,但我认为这应该足以了解情况。
您应该检查nonNull
是否在每个嵌套级别。类似这样的东西:
IntStream.range(0, f.length)
.filter(i -> Objects.nonNull(f[i]))
.forEach(i -> IntStream.range(0, f[i].length)
.filter(j -> Objects.nonNull(f[i][j]))
.forEach(j -> IntStream.range(0, f[i][j].length)
.filter(k -> Objects.nonNull(f[i][j][k]))
.forEach(k -> IntStream.range(0, f[i][j][k].length)
.filter(l -> Objects.nonNull(f[i][j][k][l]))
.forEach(l -> f[i][j][k][l] =
"/" + (l) + "|" + (k) + "|" + (j) + "|" + (i) + "\"))));