ArrayIndexOutOfBounds с циклами For

Я пытаюсь создать 2D-массив квадратов (пользовательский класс) для живых обоев. Я подсчитываю, сколько из них может отображаться с использованием ширины и высоты экрана и окончательных значений для квадратной длины стороны и расстояния между ними. При инициализации квадратов в массиве я использую вложенные для циклов. Однако, когда я запускаю это на эмуляторе, я получаю индекс за пределами.

java.lang.ArrayIndexOutOfBoundsException: length = 6; Индекс = 6

Почему цикл for не работает?

@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
 this.width = width;
 this.height = height;

 calcSquares();
 initSquares();

 super.onSurfaceChanged(holder, format, width, height);
}

private void calcSquares()
{
 numSquaresW = width/SQUARE_SIDE;
 numSquaresH = height/SQUARE_SIDE;

 while(width % (numSquaresW * SQUARE_SIDE) < (numSquaresW + 1) * SQUARE_GAP)
 numSquaresW--;
 while(height % (numSquaresH * SQUARE_SIDE) < (numSquaresH + 1) * SQUARE_GAP)
 numSquaresH--;

 marginW = ((width % numSquaresW) - ((numSquaresW - 1) * SQUARE_GAP)) / 2;
 marginH = ((height % numSquaresH) - ((numSquaresH - 1) * SQUARE_GAP)) / 2;

 squares = new WallpaperSquare[numSquaresW][numSquaresH];
}

private void initSquares()
{
 synchronized(squares)
 {
 for(int i=0; i
4 ответа

Внутри initSquares вас есть for(int j=0; j<numsquaresh; i++)<="" code="">. Последнее положение в <code>for должно быть j++.


Во втором цикле вы должны иметь

for(int j=0; j
<p> на месте</p> <pre class="prettyprint linenums"> for(int j=0; j</pre><code>


В цикле Inner for попытайтесь поместить j++

for(int j=0; j


напишите j++ вместо i++ во втором цикле. , , , ,

licensed under cc by-sa 3.0 with attribution.