Мой код получает исключение массива за пределами моего кода, но он будет работать и обработать sh после первых 2 входных данных, что не так - PullRequest
0 голосов
/ 29 апреля 2020
do {
     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);

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

1 Ответ

0 голосов
/ 01 мая 2020

Было бы полезно увидеть немного больше контекста, в частности: откуда берется значение 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);
...