#indexoutofboundsexception
#исключение indexoutofboundsexception
Вопрос:
public final class StudentAttackerController implements AttackerController { public void init(Game game) { } public void shutdown(Game game) { } public int update(Game game, long timeDue) { // generating Pair data structure to return both defender and Integer value Pair lt;Defender , Integergt; result = nearestDefender(game, false); Defender vulnerableDefender = result.first(); int vulnerableDefenderDistance = result.second(); result = nearestDefender(game, true); Defender normalDefender = result.first(); int normalDefenderDistance = result.second(); // checking if there is a defender near me and if its not vulnerable if(normalDefender != null amp;amp; (normalDefenderDistance lt;= vulnerableDefenderDistance amp;amp; normalDefenderDistance lt;= 6)){ return game.getAttacker().getNextDir(normalDefender.getLocation(), false); } // if above is false, then there is no threat OR is safe to chase vulnerable else if(vulnerableDefender != null){ return game.getAttacker().getNextDir(vulnerableDefender.getLocation(), true); } else if (powerPillNear(game)){// if there is a power pill near the attacker, stay there if(normalDefenderDistance lt;= 6){//if there is a defender in the way of the vulnerable one, flee instead of chasing return eatPill(game); } return game.getAttacker().getReverse(); } else if(normalDefenderDistance lt;= 6){ return game.getAttacker().getNextDir(normalDefender.getLocation(), false); } else return eatPill(game); //eat power pills } private int eatPill(Game game) {// sends the attacker to eat power pills and when there are none, eat regular pills Node _nodePowerPill = game.getAttacker().getTargetNode(game.getPowerPillList(), true); Node _nodePill = game.getAttacker().getTargetNode(game.getPillList(), true); try { return game.getAttacker().getNextDir(_nodePowerPill, true); } catch (NullPointerException e) { return game.getAttacker().getNextDir(_nodePill, true); } } private Pairlt;Defender,Integergt; nearestDefender(Game game, boolean bool) { // true for distance from defender to attacker and false for the opposite Defender defender = null; int tempInt = Integer.MAX_VALUE; Node attackerLocation = game.getAttacker().getLocation(); if (bool) {//checking for the boolean that i passed in when i called the method in Update for (int i = 0; i lt; 4; i ) { Defender temp = game.getDefenders().get(i); if (tempInt gt; temp.getPathTo(attackerLocation).size() amp;amp; !temp.isVulnerable() amp;amp; temp.getLairTime() == 0 ) { defender = temp; tempInt = temp.getPathTo((attackerLocation)).size(); } } } else {// else for when i need the path from the attacker to the closest defender that is vulnerable for (int i = 0; i lt; 4; i ) { Defender temp = game.getDefenders().get(i); if (tempInt gt; attackerLocation.getPathDistance(temp.getLocation()) amp;amp; temp.isVulnerable()) { defender = temp; tempInt = attackerLocation.getPathDistance(temp.getLocation()); } } } return new Pairlt;gt;(defender,tempInt); // return the pair, with the defender and the distance } private boolean powerPillNear(Game game) { // checking for a power pill near the attacker Listlt;Nodegt; nodes = game.getAttacker().getLocation().getNeighbors(); for(int i = 0; i lt; nodes.size(); i ) { if (nodes.get(i) != null amp;amp; game.checkPowerPill(nodes.get(i))) { return true; } } return false; } }
Код, по сути, делает уровни автоматической очистки PacMan. Всякий раз, когда я запускаю код, я получаю исключение IndexOutOfBoundsException в строке 49, иначе возвращаю eatPill(игра); и строку 56, узел _nodePowerPill = game.getAttacker().getTargetNode(game.getPowerPillList(), true);
Похоже, что проблемы возникают из-за употребления энергетических таблеток и таблеток, но я не понимаю, что не так с кодом. У меня нет проблем в IntelliJ, за исключением «Вызов метода» getLocation «может привести к» Исключению NullPointerException » в строке 47, и я не знаю, что это значит.