为什么这会导致数组超出范围异常?
x[10][2] = 5;
这是否应该分配第11个数组的第3个点,值为5
我以矩形的方式想到了它。 就像我们要计算11行(代表10个数组) 然后我们必须转到第3列,即2
OR
我应该将它看作一个数组,寻找大小为2的第11个实际上不存在的数组?
答案 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中,并没有二维数组,而是实际上是数组的数组。