2015-04-07 3 views
0

проблема, которую я держать имея в том, что он говорит java.lang.ArrayIndexOutOfBoundsException: 165ArrayIndexOutOfBoundsException, когда индекс массива я прошу не выходить за пределы

165 это число значений он фактически должен содержать.

Я попытался изменить длину целочисленного массива на большее число, но он оставил , давая мне ошибку, будь то с большим числом.

Я напечатал все, чтобы увидеть, если возможно, проблема была моя цикл, , но все кажется нормально (делает 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++) { 
Смежные вопросы