Слишком много неправильных утверждений if , else-if?

#java

#java

Вопрос:

Мне нужно создать программу, имитирующую перемещение муравья в сетке размером 5×5 ячеек. Представьте массив размером 5×5, в котором в позициях (2,2) и (3,3) есть пища для сбора муравьев. Каждый муравей начинает двигаться из своего гнезда, которое находится в определенной ячейке (1,4 или 4,1). Существует метод с именем move(), который я должен написать, который перемещает ant на одну ячейку при каждом вызове. Перемещение может быть горизонтальным или вертикальным. Также муравей не может переместиться на свою последнюю позицию (чтобы избежать движения вперед и назад). Также в каждой ячейке есть «точки запаха», и муравей предпочитает заходить в ячейку с наибольшими точками (поэтому вы сравниваете доступные варианты и выбираете тот, у которого самые большие точки запаха, просто так?). Теперь проблема. Они хотят, чтобы муравей совершал совершенно случайные ходы, если в ячейке нет точек запаха или точки запаха доступных ячеек равны. Итак, подведем итог:

  1. оператор if для проверки, в какой ячейке находится ant. Когда вы его найдете, вы знаете, где искать его предыдущий ход.
  2. вложенный оператор if для проверки, в какой ячейке ant был последним. Это 3 или 4 оператора if в области 5×5. Когда вы найдете последний, в котором муравей не может двигаться, вы знаете, какие ячейки сравнивать .
  3. вложенный оператор if между 2 или 3 ячейками, чтобы найти ту, у которой больше всего точек запаха.
  4. вложенный оператор if в случае, если их точки запаха равны или 0. В этом случае муравей движется совершенно случайным образом (я сделал это с помощью Math.random()). Все вышеперечисленное относится только к одной ячейке!. Каждая ячейка имеет разные параметры из-за ее расположения на карте. Итак, чтобы сделать это, как вы можете видеть, мне нужно слишком много операторов if. Я даже не могу их сосчитать, не сходя с ума! Но я не могу представить способ сделать это без операторов if. Кроме того, каждая ячейка отличается, и у муравья есть разные варианты перемещения, поэтому я не могу их классифицировать. Например, представьте, что ant находится в (1,1) . Он может перейти только к (1,2) или (2,1) . Если он равен (4,2), он может перейти к (4,3) или (3,2) или (4,1) или (5,2)! Вы должны выполнить 4 оператора if, чтобы проверить, какой из них был его последней позицией, а затем перейти к другим вложенным ifs… Итак, что вы думаете? Неправильно ли иметь так много ifs?
 // int pos[] = new int[2]; in the pos[0] is the position for the x, pos[1] for the y.
if(isAt(1,1))
        {
          if(wasAt(pos[0] 1,pos[1]))
          {
            previousX = pos[0];
            previousY = pos[1];
            pos[1] = pos[1]   1;
          }
          else
          {
            previousX = pos[0];
            previousY = pos[1];
            pos[0] = pos[0]   1;
          }
        }
 

Комментарии:

1. Сложно ли отслеживать, что делает код? Если да, то это слишком сложно.

2. Да, это так! Честно говоря, я вынужден делать это таким образом, без дополнительных функций, которые помогли бы мне отслеживать все! 🙂

Ответ №1:

Это звучит как слишком много if утверждений. Вот несколько предложений:

  1. Вы должны помнить, где ant находится в переменной. Я не думаю, что вам нужны какие-либо операторы if, чтобы проверить, в какой ячейке находится ant.
  2. Вы должны помнить, где ant был последним в другой переменной.
  3. Вы должны составить список окружающих точек и их точек запаха. Затем удалите из этого списка предыдущее местоположение ants.
  4. Используя приведенную выше коллекцию, вы можете перебирать, чтобы выбрать правильный, или, если их несколько, выбрать один наугад из коллекции.

При перемещении ant установите предыдущее местоположение в текущее местоположение, а затем обновите текущее местоположение.

Комментарии:

1. У меня есть функции и переменные, которые хранят информацию, которую вы говорите. Я попытаюсь написать часть приведенного выше кода

2. Я поместил код в свой запрос. Проверьте это

3. Кроме того, это завершенный код, и мне нужно создать только некоторые функции. К сожалению, я не могу сделать это самостоятельно