2015-04-07 75 views
0

我一直有这个问题的是,它说java.lang.ArrayIndexOutOfBoundsException:165ArrayIndexOutOfBoundsException异常当数组索引我问不出去界限

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; 
} 

回答

10

我把遇到的问题是,它说java.lang.ArrayIndexOutOfBoundsException:165

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

右键 - 然后指数165是出界。

阵列在Java中是基于0的,因此,如果阵列具有165倍的值时,有效的索引为0至164以下。

for回路应使用<而不是<=的界限:

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