Pull to refresh

Comments 25

АААА!!! Помогите.
Что с хабром??? Я хотел сделать правку в статье, а он еще одну создал. Немогу скрыть. Немогу в черновики публикануть. Что с ним????
Я конечно полный лузер в Java, но разве в последнем листинге не должно быть b.Turn();?
Я хочу что бы все турны выполнялись через Ворлд.

ПС. И нахрена мне такое счастье… через эти глюки карма в говне… спасибо дорогое НЛО. два раза за день…
Ох, туплю, действительно :) Это конец хода видимо.
public Bot(int energy, String name, World world) {
 //...  
 if (this.energy < 1) {
  this.live = false;
 } else {
  live = true;
 }
 //...
}

У Вас боты создаются мёртвыми независимо от переданной в конструктор энергии.
Ну и World.Turn() их обнуляет.
Ну и сама эта конструкция являет собой отличный образчик индийского кода :)
Может лучше всё же
this.live = (energy>=1)
Забавно. У меня стоит IntelliJ IDEA. Инспектор кода предложил заменить мой if на this.live = (energy>=1). Забавно…
Bot b = new Bot(20, «B», w)
Создавался с енергией 20, тоесть живой.
Сорри, не заметил «this.energy = energy» в первой строке конструктора.
ссылка не теряется — у вас же она хранится в residents[1][2]. поэтому никто её собрать не должен.

код не падает, и не должен. хотя баги есть (например размерность массива [height][width], а используется как [width][height])
я бы предположил, что падает из-за world.ResidentAction(this, (ACTION) moves.lastElement()) в Bot.
при этом обнуляется ссылка в массиве — что приведет к NRE при вызове isLive()
Да падает на isLive().
А что плохого в world.ResidentAction(this, (ACTION) moves.lastElement())?
там обнуляется элемент массива в некоторых кейсах (разве нет?), а в турн вы пытаетесь его использовать
ААА!!! Точно. residents[res.X()][res.Y()] = null;
Большое спасибо!
А как же оно работало на других компах????
также, просто этот кейс не выпадал на исполнение скорее всего
выпадал 100%. код не менялся. ВОт там сборщик работал действительно странно.:)
забудьте про сборщик. в 99.99% случаях код фреймворка работает верно
Завтра протестирую на том компе, на котором не вылитало исключение и отпишусь.
Еще раз спасибо за полезный опыт.
Все оказалось просто, ошибка в логике. Мой напарник, который тестил этот код и у которого небыло ошибки, просто удалил кусок кода в котором вносились хода в лист. Ходов небыло, перемещений небыло, исключений небыло… вот и все.
Нужно вместо
residents[i][j]).Turn();
if(!residents[i][j].isLive()) residents[i][j] = null;

написать
if(!residents[i][j].isLive()) residents[i][j] = null;
else{
residents[i][j]).Turn();
}
Спасибо. Сам бы не нашел.
Название топика звучит как отличная вакансия =)
Sign up to leave a comment.

Articles

Change theme settings