2011-07-19 117 views
-1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 

我有布尔类型 是为什么我会收到一个ArrayIndexOutOfBoundsException?

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

每次获取输入, 它标志着指定的数组为真 即阵列,

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 

什么不对这个

+3

什么是sc.nextInt()? – Kal

+0

请更改您的问题标题。 :) – everton

+2

K的价值是什么? – slandau

回答

5

Exception你看到的是因为你试图访问不存在(外位于数组的元素边界)。

您初始化的数组在两个维中都有元素0 ... 49。所以,你可以将值插入深藏在一个[0-49]任意位置[0-49]

当你这样做:

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

有您访问超出这些位置的值possibliity。如负值或太高(在这种情况下,您正在访问-1)。

您的问题源于sc.nextInt()无法从您的输入中产生可用整数的事实。你是如何初始化sc

0

xy是-1蚂蚁这是无效的数组索引(您的阵列被索引为0到49)。

3

这意味着你已经试过用数组中的索引-1访问元素的元素。所以nextInt()返回-1某处。

1

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

index < 0index >= array.length

在这种情况下,指数是-1

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

要解决该问题,您可以确保xy始终处于范围内(可以是bandaid)或修复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; 
} 
0

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

说,你是试图访问指数= -1,数组索引从0

1

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

0

ArrayIndexOutOfBoundsException的原因是在中x或y大于等于(或低于0)。你必须确保x和y至少为0,并在最后49

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; 
} 
+1

问题的根源在于输入,而不是如何处理。在这种情况下,扫描程序应该避免超出数组边界的值。 – rtheunissen

0

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

0

您的扫描仪读取x和y的值,并且如果其中一个超出了数组的边界(在本例中小于0且大于49 ),你会得到一个IndexOutOfBoundsException。

相关问题