我的作业将在 40 分钟内到期...我将其提交到此在线事物并测试方法等,但我收到此错误。我知道什么是越界,但我不明白它在它指定的代码中发生的位置:
public int countNeighbours(int x, int y) {
int neighbourCount = 0;
for (int i = 0; i < cells.length; i++) {
for (int j = 0; j < cells.length; j++) {
if ((cells[x][y].isAlive() == true) && (x < cells.length) && (y < cells.length) && (x >= 0)
&& (y >= 0)) {
neighbourCount++;
}
else if ((cells[x][y].isAlive() == false) && (x < cells.length) && (y < cells.length) && (x >= 0)
&& (y >= 0)) {
neighbourCount--;
}
else if (!(x < cells.length) || !(y < cells.length) || !(x >= 0) || !(y >= 0)) {
return 0;
}
else {
neighbourCount = neighbourCount;
}
}
}
return neighbourCount;
}
我不知道它是否真的有效,我有一个不同的代码,但遇到了问题。
无论如何,在线事物基本上会测试无效坐标并确保我的代码返回无效坐标的正确值(即返回 0)。
所以我不知道为什么会出现越界错误,我感觉我已经完全指定了边界。
我还有一个子问题,它也未能通过测试,其中单元格有 8 个邻居,但我的代码返回 -9。很明显,它只是通过返回 neighbourCount 的那个,但我真的不明白为什么。我是否遗漏了规范中的某些内容?或者它可能与我的代码的完全不同的部分有关。
最佳答案
表达式是从左到右计算的,因此在访问cell[x][之前,您应该检查
:x
和y
的值是否在有效范围内y]
if ((x < cells.length) && (y < cells.length) && (x >= 0)
&& (y >= 0) && (cells[x][y].isAlive() == true))
顺便说一句,此测试假设 cells
是方阵(即它具有相同的列数和行数)。
PS,目前还不清楚为什么要迭代 i
和 j
,然后在循环中根本不使用它们。
关于java - 数组索引越界异常-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33183011/