我写了一段代码,它一直给我一个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
. . . . . . . . . . . . . * .
. . . . . . . . . . . . * . .
. . . . . . . . . . . . * * *
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
* * * * * * * * . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
答案 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