gpt4 book ai didi

java - 为什么我的 0-16129 索引数组不为空,但其余索引为空?

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:17 27 4
gpt4 key购买 nike

我有一个长度为 97536 的索引数组,当它达到 16,129 时,它会给我一个空指针异常。 索引[]索引=新索引[6 * (VERTEX_COUNT - 1) * (VERTEX_COUNT * 1)];。然后我有一个双 for 循环和一个指针来循环遍历数组中的所有对象并初始化它们。

int pointer = 0;

for(int gz = 0; gz < VERTEX_COUNT - 1; gz++)
{
for(int gx = 0; gx < VERTEX_COUNT - 1; gx++)
{
indices[pointer] = new Index((gz * VERTEX_COUNT) + gx);
indices[pointer] = new Index(((gz + 1) * VERTEX_COUNT) + gx);
indices[pointer] = new Index(((gz * VERTEX_COUNT) + gx) + 1);
indices[pointer] = new Index(((gz * VERTEX_COUNT) + gx) + 1);
indices[pointer] = new Index(((gz + 1) * VERTEX_COUNT) + gx);
indices[pointer] = new Index((((gz + 1) * VERTEX_COUNT) + gx) + 1);
pointer++;
}
}

当数组是int[]索引时,不会出现此错误。我很困惑,想知道为什么空指针异常发生在 16129。第一个想法是 for 循环永远不会达到正确的数字,如果是这样我将如何计算? - 提前致谢

最佳答案

你说你的数组有 97536 个项目。所以我推断出 VERTEX_COUNT=128。我注意到 6*127*128 = 97536

您正在运行一个嵌套的 for 循环,其中每个循环从 0 到 VERTEX_COUNT-1,或从 0 到 127。127*127=16129,并且正如上面的评论者指出的那样,您在每个内部循环中覆盖数组中的相同位置 6 次,因此您仅实例化从 0 到 16128。因此,当您尝试访问位置 16129 时(及以上),您将检索 null,如果您在不检查的情况下取消引用它,它自然会抛出您的 NPE。

我假设您不想写入同一个索引六次,而是写入六个连续索引,所以我修复此问题的建议是

    { // inner loop body
indices[pointer++] = new Index((gz * VERTEX_COUNT) + gx);
indices[pointer++] = new Index(((gz + 1) * VERTEX_COUNT) + gx);
indices[pointer++] = new Index(((gz * VERTEX_COUNT) + gx) + 1);
indices[pointer++] = new Index(((gz * VERTEX_COUNT) + gx) + 1);
indices[pointer++] = new Index(((gz + 1) * VERTEX_COUNT) + gx);
indices[pointer++] = new Index((((gz + 1) * VERTEX_COUNT) + gx) + 1);
// DO NOT DO pointer++ HERE
}

我敢打赌,当它是 int[] 时,您也遇到了同样的问题,但您以前从未注意到它,因为 int[] 中每个项目的默认值都是 0(而不是 null),这不会给您 NPE...

关于java - 为什么我的 0-16129 索引数组不为空,但其余索引为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30807450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com