不知道是什么导致我的ArrayIndexOutOfBoundsException错误

时间:2014-09-30 00:31:13

标签: java arrays

我写了一段代码,它一直给我一个ArrayIndexOutOfBoundsException错误,我不知道为什么。我认为我已经正确设置了数组的大小,但显然这不是真的。即使我将数组的大小设置为100,我仍然会收到错误。在代码下方,您可以找到数据输入。

import java.util.Scanner;

public class GameOfLife {

public static void main(String []args) {

    Scanner scanner = new Scanner(System.in);

    int length = scanner.nextInt();
    int width = scanner.nextInt();
    int generations = scanner.nextInt();
    Boolean[][] cellsInput = new Boolean[length - 1][width - 1];

    System.out.println();   
    int count = 0;
    int y = 0;
    while (scanner.hasNext()) {
        count++;
        if (count <= length) {
            if (scanner.next().equals(".")){
                cellsInput[y++][count] = false;
            } else if (scanner.next().equals("*")) {
                cellsInput[y++][count] = true;
            }
        }
        else {
            count = 0;
            y++;
            if (scanner.next().equals(".")){
                cellsInput[y++][count] = false;
            } else if (scanner.next().equals("*")) {
                cellsInput[y++][count] = true;
            }   
        }
    }

}

}

输入(例如):

15 15 3
. . . . . . . . . . . . . * .
. . . . . . . . . . . . * . .
. . . . . . . . . . . . * * *
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
* * * * * * * * . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

2 个答案:

答案 0 :(得分:4)

例如,以下行错误:

if (count <= length) {

由于您使用count作为索引,当count等于length时,它超过最大索引length - 1 - 因此ArrayIndexOutOfBoundsException。它应该是:

if (count < length) {

答案 1 :(得分:2)

问题在于:

if (count <= length) {

最终,这将尝试引用

cellsInput[y++][length]

其中length是第二个数组的长度。但是,第二个数组中的最后一个索引实际上是length - 1

此处出现此问题是因为 Java中的所有数组都以0 开头。所以你总是想做

if (count < length) {

只要长度是长度是数组的长度。

长度始终是数组中对象的数量,从1开始计数。

示例:

Array arr1 = [a, b, c, d]
Length of arr1 = 4, it has 4 elements

Element   |   Index
--------------------
   a      |    0
   b      |    1
   c      |    2
   d      |    3

正如您所见,索引4超出范围。因此,当您尝试引用arr1[arr1.length]时,您会获得IndexOutOfBoundsException