ArrayIndexOutOfBoundsException当我问的数组索引没有超出范围时

时间:2015-04-07 10:51:21

标签: java indexoutofboundsexception

我一直存在的问题是它说java.lang.ArrayIndexOutOfBoundsException:165

165是它实际应包含的值的数量。

我尝试将整数数组的长度更改为更大的数字,但它保留了 给我错误,无论是更大的数字。

我把所有内容都打印出来,看看问题是否是我的for循环, 但是一切似乎都很好(165个阵列中有正确的数字)

我看不出问题出在哪里。

public int[][] getTilePositionsIn(int pixelLeft, int pixelBottom, int pixelRight, int pixelTop){
    int starterTileX = pixelLeft/getTileLength();
    if (starterTileX < 0)
        starterTileX = 0;
    System.out.println(starterTileX);
    int starterTileY = pixelBottom/getTileLength();
    if (starterTileY < 0)
        starterTileY = 0;
    System.out.println(starterTileY);
    int tileLength = getTileLength();
    int blockWidth = pixelRight - pixelLeft + 1;
    int widthInTiles = blockWidth/tileLength +1;
    int blockHeight = pixelTop - pixelBottom + 1;
    int heightInTiles = blockHeight/tileLength +1;
    int numberOfTiles = widthInTiles * heightInTiles;
    System.out.println(widthInTiles);
    System.out.println(heightInTiles);
    System.out.println(numberOfTiles);
    int[][] tiles = new int[numberOfTiles][2];

    for (int y = 0; y <= heightInTiles; y++) {
        for (int x = 0; x <= widthInTiles; x++) {
            int index = y*widthInTiles + x;
            System.out.println(index);
            tiles[index][0] = x;
            tiles[index][1] = y;
            System.out.println(Arrays.toString(tiles[index]));
        }
    }
    return tiles;
}

1 个答案:

答案 0 :(得分:10)

  

我一直存在的问题是它说java.lang.ArrayIndexOutOfBoundsException:165

     

165是它实际应包含的值的数量。

正确 - 然后索引165超出范围。

Java中的数组是基于0的,因此如果数组有165个值,则有效索引为0到164(包括0和164)。

您的for循环应使用<代替<=作为边界:

for (int y = 0; y < heightInTiles; y++) {
    for (int x = 0; x < widthInTiles; x++) {