2015-03-12 3 views
0

Я пытаюсь использовать метод getFreeAdjacentLocation из класса Field, но я получаю сообщение об ошибке из класса CleverSheep, указав, что он не может найти метод-символ getFreeAdjacentLocation (Location) 'Как вызвать метод List в другом классе

у меня есть класс Field

public class Field 
{ 
// some fields 
// constructor 
// other methods 
public List<Location> getFreeAdjacentLocations(Location location) 
{ 
    validLocation(location); 
    List<Location> free = new LinkedList<Location>(); 
    List<Location> adjacent = adjacentLocations(location); 
    for(Location next : adjacent) { 
     if(getObjectAt(next) == null) { 
      free.add(next); 
     } 
    } 
    return free; 
    } 

у меня есть умный класс SHEEP

public class CleverSheep 
{ 
    // constructor 
    public CleverSheep(Field field, Location location, int n) 
    { 
     super(field, location); 
    } 

public void act() 
{ 
    if (isAlive()) { 
     Location newLocation =  getField().freeAdjacentLocation(getLocation()); 
     Location freeLocation = getField().getFreeAdjacentLocation(getLocation()); 
     if(newLocation != null) { 
      moveToLocation(newLocation); 
     } 

     // If Wolf is in this location 
     else if (newLocation == null) { 
      moveToLocation(freeLocation); 
     } 

    } 
} 
} 
+0

где is getField()? –

+0

Это 'getFreeAdjacentLocations' не' getFreeAdjacentLocation'. См. _s_? – GriffeyDog

+0

@LawrenceAiello getField() из другого класса Animal (абстрактный класс) – tb1000

ответ

1

Ваш метод называется getFreeAdjacentLocations() но во втором блоке вы вызываете getFreeAdjacentLocation() без «s».

Вам также может понадобиться перепроверить ваши типы переменных, так как тип возвращаемого getFreeAdjacentLocations() является List<Location> и тип freeLocationLocation является. Вам нужно будет что-то вроде этого:

List<Location> freeLocations = getField().getFreeAdjacentLocations(getLocation()); 

Метод moveToLocation() может жаловаться, так как он, вероятно, ожидает один Location, а не список. Поэтому вам нужно будет обработать список freeLocations и выбрать одно место для его передачи. Например:

for (Location freeLocation : freeLocations) { 
    if (satisfiesCondition(freeLocation)) { 
     moveToLocation(freeLocation); 
     break; 
    } 
} 

Где satisfiesCondition() это метод, который вы должны были бы осуществить и что бы вернуть true если freeLocation это место вы хотите перейти.

+0

Я изменил «freeLocation» на «Список ». Я не получаю другую ошибку «несовместимые типы: java.util.List не может быть преобразован в местоположение». – tb1000

+0

Похоже, вы делаете то же самое с newLocation. Проверьте строку, в которой было отправлено исключение, и посмотрите, действительно ли это так. –

+0

Исключение было выбрано в 'moveToLocation (freeLocation)' в инструкции else if. Взгляд freeAdjacentLocation указывается как «общедоступное местоположение freeAdjacentLocation (Местоположение местоположения) {...} '. – tb1000

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