Посмотрите, сообщение об ошибке, которое вы видите там, называется: "трассировка стека"
. Оно содержит очень полезную информацию о том, что это была за ошибка:
Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 2
at GuessingGame.gameLogic(GuessingGame.java:77) // This is where the error happened
at GuessingGame.paint(GuessingGame.java:55) // This is your code
at java.awt.Container.update(Container.java:1801) // not your code
at sun.awt.RepaintArea.updateComponent(RepaintArea.java:239) // not your code
Если вы ее видитеговорит: GuessingGame.java:77
это означает, что ошибка произошла в файле GuessingGame.java
в строке 77. Других файлов нет в вашем исходном коде (Container.java и Repaint.java), поэтому они не там, где возникла проблема.
В GuessingGame.java в строке 77 вы пытались получить доступ к index за пределами границ массива (отсюда ArrayIndexOutOfBoundException
), кроме того, число 2
это числоиндекс, который вы пытались использовать.
С этой информацией вы можете взглянуть на исходный код и увидеть, что строка 77 (по крайней мере, из опубликованного кода):
if( boxes[row][col] == chosenBoxes[i] ) {
Итак,boxes
не проблема (его размер равен 4, он был объявлен как boxes = new MaskableBox[ROWS][COLS];
, а ROWS и COLS объявлены как 4).Таким образом, ответственный должен быть: chosenBoxes
Он был инициализирован как:
chosenBoxes = new MaskableBox[2];
Размер 2 , что означает, что единственными действительными индексами являются 0
и 1
.При попытке использовать index = 2 возникает исключение.
Теперь, имея в виду эту информацию, вы можете искать код, который может ее вызвать.
Как указывают другие ответы, причина:
for (int i=0; 0 <= chosenBoxes.length; ++i ) {
Всего на 3 строки выше !.Он гласит: «пока ноль меньше или равен 2 ...» , который всегда будет возвращать true, потому что 0 всегда будет <2. </p>
Итак, вам просто нужно исправитьэту часть и перепроверьте.
Я надеюсь, что это объяснение поможет вам решить подобные проблемы в будущем.Очень важно научиться читать трассировку стека.
Я даже могу представить себе аббревиатуру в будущем: RTFST;)