Не удается найти символ в Java, GreenFoot - PullRequest
0 голосов
/ 14 декабря 2018

Прежде чем начать, я хотел бы отметить, что я новичок в программировании, и я действительно плохой.Если вы можете придумать ЛЮБУЮ причину того, что может быть причиной моей проблемы, возможно, стоит проверить.

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

Вот где ошибка.Это в классе еды (рыба, то, что ест акула):

Actor foodHit = getOneIntersectingObject(Shark.class);
  if(foodHit!=null)
  {
    World MyWorld = (World)MyWorld;
    Counter counter = World.getCounter(); 
    // The error is apparently in this line above, here's the error code: "cannot find symbol -  method getCounter()".
    counter.addScore();
    MyWorld.removeObject(this);
  }

Это метод, о котором идет речь, в классе MyWorld:

public Counter getCounter()
{
  return counter;
}

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

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Если у вас есть базовый класс World и класс MyWorld, который расширяет World, а метод getCounter() входит в производный класс MyWorld, то getCounter() не будет "видимым" после васприведение объекта типа MyWorld к объекту типа World.getCounter() существует только "в" MyWorld объектах типа.
(и приведение в этом направлении в любом случае не требуется. Экземпляры MyWorld также являются экземплярами World, преобразование не требуется. Но случаи World может или не может быть также экземплярами MyWorld, приведение к MyWorld требуется для вызова методов, определенных в MyWorld)

Кроме того, в Java принято начинать имена переменных со строчных букви имена классов в верхнем регистре.Поэтому читатель вашего кода обычно ожидает, что MyWorld будет именем класса (именем типа объекта), а myWorld будет именем переменной (именем экземпляра объекта).

Я полагаю, поскольку выкопируя код из видео, вы должны делать то, что они делают, чтобы вам было легче следить за видео.Но если бы я кодировал это, я хотел бы поместить метод eatFood () в класс Shark, чтобы я мог написать

if (foodHit != null) {
    aShark.eatFood()
}

таким образом, чтобы мировой код приведения и обновления счетчиков инкапсулировался в классе Sharkвместо того, чтобы разбрасываться повсюду, где вы проверяете наличие продовольственных ударов.

0 голосов
/ 14 декабря 2018

Я верю, если вы измените код.

С

World MyWorld = (World)MyWorld;
Counter counter = World.getCounter(); 

На

World MyWorld = (World)MyWorld;
Counter counter = MyWorld.getCounter(); 

Это должно исправить это.Мне пришлось опубликовать ответ, так как у меня недостаточно представителей, чтобы комментировать.Дайте мне знать, если это работает.

...