Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组索引超出边界异常-1_Java - Fatal编程技术网

Java 数组索引超出边界异常-1

Java 数组索引超出边界异常-1,java,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++) {

我要在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;
}
公共整数(整数x,整数y){
int-neighbourCount=0;
对于(int i=0;i=0)
&&(y>=0){
邻域计算++;
}
else if((cells[x][y].isAlive()==false)和&(x=0)
&&(y>=0){
邻山--;
}
如果(!(x=0)| |!(y>=0)){
返回0;
}
否则{
neighbourCount=neighbourCount;
}
}
}
返回邻居帐户;
}
我不知道它是否真的有效,我对此有不同的代码,但有问题

无论如何,在线的东西基本上是测试一个无效的坐标,并确保我的代码返回一个无效坐标的正确值(即返回0)

所以我不知道为什么会有越界错误,我觉得我已经完全指定了界限


我还有一个子问题,它也没有通过一个测试,其中单元格有8个邻居,但我的代码返回-9。很明显,它只通过返回neighbourCount的那一个,但我真的不明白为什么。我在说明书上遗漏了什么吗?或者它与我的代码中完全不同的部分有关

表达式是从左到右计算的,因此在访问
单元格[x][y]
之前,应检查
x
y
的值是否在有效范围内:

if ((x < cells.length) && (y < cells.length) && (x >= 0)
                && (y >= 0) && (cells[x][y].isAlive() == true)) 
if((x=0)
&&(y>=0)和&(单元格[x][y].isAlive()==true)
顺便说一句,该测试假设
单元格
是一个方阵(即它具有相同数量的列和行)


PS,不清楚为什么你迭代
i
j
,然后在循环中根本不使用它们。

哪一行#你得到了错误?将
for(int j=0;jfor(int j=0;j
你没有使用
i
j
,为什么你有它们?还有,什么是
x
y
?你不需要
neighbourCount=neighbourCount;
这让我发笑:)。事实上你根本不需要
else
语句。错误不在任何一行,它完全在另一个程序上,我必须这样做提交给检查代码的人。它只说这是代码的那一部分。我无意添加的i和j部分,我误解了赋值问题。x和y是不同单元格的坐标。最后……是的,neighbourCount是多余的,但我担心如果我删除它,我会弄乱一些东西还有,很抱歉,我忘了删除I和j迭代,因为一开始我对作业问题有误解,所以使用了循环。