繁体   English   中英

数组索引超出范围例外-1

[英]Array index out of bounds exception -1

我现在要在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][y]之前,应检查xy的值是否在有效范围内:

if ((x < cells.length) && (y < cells.length) && (x >= 0)
                && (y >= 0) && (cells[x][y].isAlive() == true)) 

顺便说一句,该测试假设cells是一个正方形矩阵(即它具有相同数量的列和行)。

PS,不清楚为什么要遍历ij ,然后在循环中根本不使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM