Russian AI Cup

Расширенный поиск  
Страницы: [1]

Автор Тема: Прошу помощи программиста Java  (Прочитано 1557 раз)

steleal

  • Full Member
  • ***
  • Сообщений: 96
Прошу помощи программиста Java
« : Ноября 24, 2013, 08:27:37 pm »

Я не программист, из языков только vba, c java шапочно знаком.
Ситуация - в некоторых случаях при отсутствии бонусов мои солдатики клинятся на одном месте.
Отладка показывает, что, несмотря на то, что на карте нет ни одного бонуса, он как бы есть, и мои солдаты пытаются его взять. Т.е. один стоит прямо на том месте, где, по данным системы, есть бонус, остальным он тоже нужен, но, тк. клетка с бонусом занята, пути нет - ждут, когда возьмет первый.
При этом размер массива с бонусами равен нулю, но в нем есть непустой элемент. Т.е. bonuses[0] существует, и имеет координаты клетки, где стоит мой солдат, у которого нет такого бонуса. Пытался воткнуть проверку на !(bonuses.length == 0), - не выполняется (см скриншот)! Я в трансе, и уже ничего не соображаю, и ничего не понимаю.
Если кто скажет, кого именно клинит - меня, java, local-runner - и как от этого избавиться - буду признателен.
Записан

amurushkin

  • Sr. Member
  • ****
  • Сообщений: 189
Re: Прошу помощи программиста Java
« Ответ #1 : Ноября 24, 2013, 08:39:33 pm »

может попробовать передавать в функцию массив bonuses как параметр? можно попробовать его копию. Вдруг поможет.
Записан

steleal

  • Full Member
  • ***
  • Сообщений: 96
Re: Прошу помощи программиста Java
« Ответ #2 : Ноября 24, 2013, 08:43:56 pm »

может попробовать передавать в функцию массив bonuses как параметр? можно попробовать его копию. Вдруг поможет.

Если что, в классе MyStrategy есть объявление
Bonus[] bonuses;
в начале функции move:
bonuses = world.getBonuses();
И более никаких других обращений к этому массиву.

и еще, в watches bonuses.length==0,  условие !(bonuses.length==0) ложно, а в коде был переход на ветку, выполняющуюся при истинности условия.  Я в трансе.
« Последнее редактирование: Ноября 24, 2013, 08:46:56 pm от steleal »
Записан

amurushkin

  • Sr. Member
  • ****
  • Сообщений: 189
Re: Прошу помощи программиста Java
« Ответ #3 : Ноября 24, 2013, 08:48:50 pm »

я это все понимаю и самому интересно почему так. но вы попробуйте мало ли. всякое бывает, если ничего не помогает порой стоит попробовать откровенную лажу ))
Записан

SladeThe

  • Global Moderator
  • Sr. Member
  • *****
  • Сообщений: 187
Re: Прошу помощи программиста Java
« Ответ #4 : Ноября 25, 2013, 12:02:53 am »

На текущей строчке исполнения присвоение полю medikit ещё не произошло. Т.е. в нём сейчас находится значение с какой-то предыдущей итерации. На скриншоте видно, что массив бонусов пуст, но никакого подтверждения вашим словам о том, что в нём есть непустой элемент.
Записан

steleal

  • Full Member
  • ***
  • Сообщений: 96
Re: Прошу помощи программиста Java
« Ответ #5 : Ноября 25, 2013, 08:27:27 am »

На текущей строчке исполнения присвоение полю medikit ещё не произошло. Т.е. в нём сейчас находится значение с какой-то предыдущей итерации. На скриншоте видно, что массив бонусов пуст, но никакого подтверждения вашим словам о том, что в нём есть непустой элемент.

medikit объявлен  в классе MyStrategy как Bonus medikit; а, если я правильно понял, чтобы сохранялось значение с предыдущей итерации, необходимо объявлять как static Bonus medikit. Так?
И по поводу if(!(bonuses.length)==0), должно выполняться, только если размер массива не равен нулю. Размер массива равен нулю, а переход по истине выполнен! Вот я и подумал, что в watches показывается одно, а на деле - другое.
Просто я не знаю, как правильно проверять массив на пустоту. Сначала пробовал сравнивать с null - не работает. Пробовал length==0. В основном работает, но изредка вылазит вот такое. Воспроизводится не каждый бой.
Записан

SladeThe

  • Global Moderator
  • Sr. Member
  • *****
  • Сообщений: 187
Re: Прошу помощи программиста Java
« Ответ #6 : Ноября 25, 2013, 08:11:58 pm »

В статик полях вы можете хранить данные, общие для всех бойцов. В обычных полях - данные одного бойца, но эти данные всё равно сохраняются между его ходами.

То, что у вас происходит, на самом деле не очень понятно. В этот "if" не должно было зайти, если только вы случайно (?) не модифицировали значение переменных в дебаге.

P.S. И замените громоздкие конструкции типа !(a == b) на a != b. Сложно читать это нагромождение скобок.
Записан

steleal

  • Full Member
  • ***
  • Сообщений: 96
Re: Прошу помощи программиста Java
« Ответ #7 : Ноября 25, 2013, 11:07:00 pm »

В статик полях вы можете хранить данные, общие для всех бойцов. В обычных полях - данные одного бойца, но эти данные всё равно сохраняются между его ходами.
....
P.S. И замените громоздкие конструкции типа !(a == b) на a != b. Сложно читать это нагромождение скобок.

Вот оно что... а я маялся! Тогда понятно, спасибо большое! Не знал, что данные между ходами сохраняются, думал, что каждый ход новый объект.
Записан
Страницы: [1]