数组索引超出绑定的2D数组

时间:2015-11-12 12:47:13

标签: java arrays

我有一个2D数组,其中没有。行是1和否。列是> 1.

double[][] T = new double[1][24];
System.out.println(T[1].length);

但是当我打印列的长度时,它表示索引超出范围。

但是当我打印以下内容时,

System.out.println(T[0].length);

我得到结果为24.但不应该T [0]应该等于1而T [1]等于24? 为什么我收到此错误? 我想,java认为上面的数组是1D数组,因为它只有一行。但我需要它作为进一步处理的2D数组。有人可以帮忙吗?

8 个答案:

答案 0 :(得分:6)

数组索引从0开始。

如果您的数组长度为1(此处为第1维),那么您只能引用元素0

换句话说:

  • 声明表示所需的尺寸(此处为1
  • 元素引用表示所需的 0-based index (此处为0

答案 1 :(得分:2)

Array个索引从0开始。

您的数组长度为1,因此T[0]是有效索引,但T[1]不是。

答案 2 :(得分:2)

System.out.println(T[0].length);

是对的。因为Array索引从0开始

答案 3 :(得分:1)

数组基于零所以当double[][] T = new double[1][24];时 你创建了一个二维数组,第一个维度是1,第二个维数是24,所以这是1 * 24数组

所以System.out.println(T[1].length);给了你java.lang.arrayindexoutofboundsexception因为数组是基于零的

如果你写了这个double[][] T = new double[3][24];你有3 * 24阵列: -

System.out.println(T[0].length);//24
System.out.println(T[1].length);//24
System.out.println(T[2].length);//24
System.out.println(T[3].length);//java.lang.arrayindexoutofboundsexception

答案 4 :(得分:1)

Array索引从0开始。

double[][] T = new double[1][24];

也可以声明如下:

double[][] T = new double[1][];
T[0] = new double[24];

答案 5 :(得分:1)

想象1X24的矩阵。你没有第二列那么明显它会通过nullpointerException。

答案 6 :(得分:1)

在Java / Android和许多其他语言中,这是声明的方式

matrix[numRows][numColumns] 

由于Array索引从0开始,您需要小心确保您正在访问单个值

x = matrix[0][1]  

或者,如果您正在访问第一行(作为单维数组)

x = matrix[0]

答案 7 :(得分:1)

数组索引以0而不是1开始。

如果您的数组长度为1,那么您可以从0开始。 所以T [0]是一个有效的索引,但T [1]不是