2013-04-19 2 views
0

Мой код можно найти здесь: http://pastebin.com/tmzGgHziGridWorld getAdjacentLocation() возвращает NullPointerException?

В основном, что делает мой тварь, он выбирает случайное местоположение и перемещается в это место, съедая всех действующих лиц на своем пути. Тем не менее, второй я нажимаю «шаг», он выдает исключение NullPointerException в строке 67. Это что-то с методом getAdjacentLocation(), ссылающимся на нулевой объект, но я не могу понять это, и мой учитель AP тоже не может.

Любая помощь очень ценится! Благодаря!

ответ

0

Метод getLocation() возвращает значение null.

Location loc = this.getLocation(); 
//Loc is now null, so the following call will result in a null pointer exception 
Location newLoc = loc.getAdjacentLocation(getDirection()); 

Это происходит потому, что это удаление себя из сетки/она ест сама

public ArrayList<Actor> getActors(){ 

    ArrayList<Actor> list = new ArrayList<Actor>(); 
    Grid<Actor> gr = getGrid(); 
    Location loc = getLocation(); 

    atLocation = atRandomLocation(); 

    if(!atLocation){ 

     setDirection(loc.getDirectionToward(randomLocation)); 

     //THIS RETURNS THE CRITTER'S CURRENT LOCATION! 
     Actor a = gr.get(getLocation()); 

     if(a != null) 
     //This critter is not going to be null, so it adds it to the list 
      list.add(a); 

    }else 
     getRandomLocation(); 

    //This list contains all actors to be eaten 
    return list; 
} 

Что ваш метод не будет проверять, если он на месте, добавляет себя в список, а затем ЕСТ СЕБЯ !

public void processActors(ArrayList<Actor> actors){ 

    for(Actor a : actors) 
     //This list only contains the critter 
     a.removeSelfFromGrid(); 
} 

Что вам нужно сделать, это найти следующее местоположение он должен переместиться, есть какие-то актеры в этом пространстве, а затем двигаться.

P.S. По-видимому, Криттер поедет сам по умолчанию, если это единственный актер.

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