2015-04-18 4 views
1

Я сделал 5x5 2D-массив квадратных кнопок, который был определен в классе, называемом организмом, и разместил их в игровой доске справа налево, сверху вниз. Когда щелкнут организм, он меняет цвет (и щелчок снова восстанавливает его первоначальный цвет). Когда вы нажимаете кнопку (другую, неорганическую) на стороне массива, все кнопки справа от тех организмов, которые уже были нажаты в массиве, сами должны изменить цвет. В коде этот метод onClick называется IterateListener().Происхождение ArrayIndexOutOfBoundsException в android?

В этом проблема. Я пытаюсь сделать последнюю часть, где я нажимаю кнопку на стороне, и приложение останавливается, и я получаю ArrayIndexOutOfBounds.

E/AndroidRuntime(893): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=5

Я убедитесь, что он имеет в виду организм в середине массива, так что организм справа должен находиться в пределах границ. Что еще будет бросать arrayIndexOutOfBounds? Дайте мне знать, есть ли какие-либо части кода, которые вы хотите увидеть, но пока я показываю части кода, с которыми специально жаловался Logcat.

Вот код getRightOrganism:

public Organism findRightOrg(Organism org) { 
    return Col[org.getRow() + 1][org.getCol()]; 

} 

Вот код OnClick:

public void IterateListener(View v) { 
    for (int i = 0; i < colony.getWidth(); i++) 
     for (int j = 0; j < colony.getHeight(); j++) { 
      if (colony.getOrg(i, j).isAlive()) { 
       colony.findRightOrg(colony.getOrg(i, j)).liveO(); 
       } 
     } 
} 

спасибо!

ответ

1

Ну, в массиве вы можете выполнять итерацию только от 0 до length-1. Итак, в вашем i = colony.getWidth() - 1 вы пытаетесь найти элемент с row = lenght-1+1 = length, который выходит за рамки для этого массива.

+0

Не следует пытаться найти row = length - 1 + 1, потому что findRightOrganism() следует вызывать только для самого централизованного организма, где организм справа находится в границах. –

+0

@ DanP ok. Как вы убедитесь, что это не маргинальный организм, эта проверка происходит в 'isAlive()'? В этом случае mb есть ошибка в логике 'isAlive()'? – AndroidEx

+0

Ну, я уверен, что это не маргинальный организм, выбирая организм, который не является маргинальным, - вот что я имею в виду, обращаясь к организму в середине массива. В массиве 5x5 организмов я нажимаю тот, который находится в третьем столбце и третьей строке. Таким образом, право один находится в пределах bounds.This является метод IsAlive():
'общественного логический IsAlive() \t { \t \t если (btn.getText() равно ("X").) \t \t \t возвратных правда; \t \t прочее \t \t \t return false; \t} '
Это код для вживления на организм:

Смежные вопросы