为什么这是一个超出范围的数组异常?

时间:2012-11-20 00:21:48

标签: java arrays multidimensional-array indexoutofboundsexception

为什么这会导致数组超出范围异常?

 x[10][2] = 5;

这是否应该分配第11个数组的第3个点,值为5

我以矩形的方式想到了它。 就像我们要计算11行(代表10个数组) 然后我们必须转到第3列,即2

OR

我应该将它看作一个数组,寻找大小为2的第11个实际上不存在的数组?

3 个答案:

答案 0 :(得分:0)

为什么这会导致数组超出范围异常?

 x[10][2] = 5;

仅当您尝试访问超出为阵列定义的范围的位置时才会发生这种情况。例如

int x[20][20];

你可以使x [10] [2] = 5;没有问题,因为10< 20和2< 20.但如果你这样做了:

x[30][20] = 5;

你会遇到越界异常,因为你试图访问2D数组的位置(30,20),这个位置超过了2D数组的大小。

答案 1 :(得分:0)

x 的第11个元素是数组吗?如果是,它的长度是多少?
 您收到该错误,因为该元素的长度可能小于3 通过尝试

进行测试
 
  System.out.printf(x[10].length);
 

希望有所帮助。

答案 2 :(得分:0)

这是因为 Name StimulusName PupilLeft Row_Num Label 1 sub7 Alpha1 10.0 1 Onset 2 sub7 Alpha1 10.0 NA NA 3 sub7 Alpha1 10.1 3 Offset 4 sub7 Alpha1 10.1 NA NA 5 sub7 Alpha1 10.1 NA NA 6 sub7 Alpha1 10.1 NA NA 7 sub7 Alpha1 10.1 NA NA 8 sub7 Alpha1 10.1 NA NA 9 sub7 Alpha1 10.1 NA NA 10 sub7 Alpha1 10.1 NA NA 不存在。

可能是因为x[10][2]不是有效元素(即x[10]等于或大于10),或者x.length不是有效元素(即{{1 }}等于或大于2)。异常消息告诉您哪个索引失败(如果它们不同)。

请注意,多维数组不必是矩阵。这称为jagged array

例如,考虑以下代码(来自Wikipedia):

x[10][2]

引用x[10].length会抛出int[][] arr = new int[2][]; // creates 2 rows arr[0] = new int[3]; // 3 columns for row 0 arr[1] = new int[5]; // create 5 columns for row 1 ,而引用arr[0][4]不会。


正如马克·史蒂文斯(Mark Stevens)在评论中所提到的那样,哪个是行,哪个是列是主观的。与jazzbassrob在评论中所说的相反,Java既没有行大次序也没有列大次序。实际上,在Java中,并没有二维数组,而是实际上是数组的数组。