Было бы полезно увидеть немного больше контекста, в частности: откуда берется значение index1
? Как это изменилось?
Подсказка для отладки массива вне пределов исключений: перед доступом к массиву выведите размер массива и индекс, который будет доступен. Например, в своем коде перед первым оператором if
добавьте:
System.out.println("HP1 array size: " + HP1.length);
System.out.println("About to access index: " + choice2);
System.out.println("myParty array size: " + myParty.length);
System.out.println("About to access index: " + index1);
Таким образом, вы можете свести свою проблему к чему-то более конкретному c (например, почему choice2
или index1
определенное значение).
Как правило, хорошей идеей является проверка индекса за пределами границ, прежде чем вы получите доступ к массиву, особенно при работе с пользовательским вводом (как вы, похоже, делаете с объектом reader
).
Вы могли бы проверить это так
do {
if (choice2 < 0 || choice2 > (HP1.length - 1) || index1 < 0 || index1 > (myParty.length - 1)) {
// handle the error
}
else if (counter%2==0 && HP1[choice2] <= 0) {
System.out.println("You cannot switch to that pokemon it has already fainted, choose someone else");
choice2 = reader.nextInt();
}
else if (counter%2==0 && choice2 == index1) {
System.out.println(myParty[index1] + " is already in battle. Please select a different pokemon.");
choice2 = reader.nextInt();
}
} while (counter%2==0 && HP1[choice2] <= 0 || counter%2==0 && choice2 == index1);