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
这有什么问题
答案 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 < 0
或index >= array.length
在这种情况下,索引为-1
。
在你的二维数组中,x
或y
指向顶部数组或嵌套数组中的非法点。
要解决此问题,您可以确保x
和y
始终使用范围(可以说是一个绑定)或修复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)
x
或y
为-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。