为什么我得到一个ArrayIndexOutOfBoundsException?

时间:2011-07-19 17:16:55

标签: java arrays

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

我有一个布尔类型的数组

static boolean[][] a = new boolean[50][50];

每次都得到输入, 它将指定的数组标记为true 就是这样,

for(int i=0; i<k; i++){
  int x=sc.nextInt();
  int y=sc.nextInt();
  a[x][y] = true;
}

但是当输入的数量(取决于k)变大时, 出现以下错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

这有什么问题

10 个答案:

答案 0 :(得分:5)

您看到的Exception是因为您正在尝试访问不存在的数组元素(位于界外区域)。

初始化的数组在两个维度中都包含元素0 ... 49。因此,您可以将值插入位于[0-49] [0-49]

内的任何位置

当你这样做时:

int x=sc.nextInt();
int y=sc.nextInt();
a[x][y] = true; 

您可以访问超出这些位置的值。例如负值或过高值(在这种情况下,您正在访问-1)。

您的问题源于sc.nextInt()未能从您的输入生成可用整数的事实。你是如何初始化sc的?

答案 1 :(得分:3)

这意味着您已尝试在数组中访问元素索引为-1的元素。所以nextInt()在某处返回-1。

答案 2 :(得分:1)

java.lang.ArrayIndexOutOfBoundsExceptio表示您尝试访问阵列中的非法索引。

即。 index < 0index >= array.length

在这种情况下,索引为-1

在你的二维数组中,xy指向顶部数组或嵌套数组中的非法点。

要解决此问题,您可以确保xy始终使用范围(可以说是一个绑定)或修复sc.nextInt()来返回有效值。

for (int i=0; i<k; i++) {
    int x=sc.nextInt();
    int y=sc.nextInt();
    if (x<0 || x>=a.length) continue;
    if (y<0 || y>=a[x].length) continue;
    a[x][y] = true;
}

答案 3 :(得分:1)

尝试在a[x][y] = true;之前打印x和y x或y可能为-1

答案 4 :(得分:1)

尝试:

for(int i=0; i<a.length; i++){
  int x=sc.nextInt();
  int y=sc.nextInt();
if(x >0 && y>0 && x<a.length && y <a[x].length)
  a[x][y] = true;
}

答案 5 :(得分:0)

xy为-1 ant,这是无效的数组索引(您的数组从0到49索引)。

答案 6 :(得分:0)

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:-1

说你试图访问index = -1,数组索引从0开始

答案 7 :(得分:0)

ArrayIndexOutOfBoundsException的原因是a[x][y] = true中的x或y>> = 50(或低于0)。你必须确保x和y至少为0,最后是49。

答案 8 :(得分:0)

您正在访问超出[50] [50]索引的数组。尝试在nextInts中指定边界以使索引保持在范围内:int x = sc.nextInt(49); int y = sc.nextInt(49);

答案 9 :(得分:0)

您的扫描程序读取x和y的值,如果其中一个超出数组边界(在这种情况下小于0且大于49),则会得到IndexOutOfBoundsException。