【问题标题】:Why is this an array out of bounds exception?为什么这是一个数组越界异常?
【发布时间】:2012-11-08 00:32:45
【问题描述】:

为什么会导致数组越界异常?

 x[10][2] = 5;

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

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

我应该将其视为一个数组,在实际上不存在的大小为 2 的数组中寻找第 11 个位置?

【问题讨论】:

    标签: java arrays multidimensional-array indexoutofboundsexception


    【解决方案1】:

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

    System.out.printf(x[10].length);

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      为什么会导致数组越界异常?

       x[10][2] = 5;
      

      只有当您尝试访问超出您为数组定义的范围的位置时,才会发生这种情况。例如

      int x[20][20];
      

      你可以使 x[10][2] = 5;没有问题,因为 10

      x[30][20] = 5;
      

      您将遇到越界异常,因为您正试图访问二维数组的位置 (30,20),该位置超出了二维数组的大小。

      【讨论】:

        【解决方案3】:

        这是因为x[10][2]不存在。

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

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

        例如,考虑以下代码(来自维基百科):

        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] 会抛出ArrayIndexOutOfBoundsException,而引用arr[1][4] 则不会。


        正如 Mark Stevens 在 cmets 中已经提到的,哪一个是行,哪一个是列,是主观的。与 jazzbassrob 在 cmets 中所说的相反,Java 既没有行优先也没有列优先。事实上,在Java中,并没有二维数组这种东西,相反,它实际上是一个数组的数组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-04
          • 2014-11-10
          • 2014-02-15
          • 1970-01-01
          • 1970-01-01
          • 2018-07-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多