java - 数组索引越界异常-1

标签 java

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

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

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

PS,目前还不清楚为什么要迭代 ij,然后在循环中根本不使用它们。

关于java - 数组索引越界异常-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33183011/

相关文章:

java - 在 OpenApi 3.0 中生成属性作为架构定义

java - 一般概念-java代码和周期时钟

java - 检查 Oracle BPEL 轮询数据库适配器是否正在工作

java - 是否可以获得包含类(CDI)的引用?

java - 无法将空值分配给原始类型错误(Spring/Hibernate)

java - 在没有 Spring 身份验证的情况下通过 web-socket 多次回复

java - 使用 JColorChooser 设置 JTable 行的颜色

java - Selenium 测试 ant 关键事件

java - 检测数字是否在特定范围内

java - Java .properties 文件的命名约定是什么?