#java
#java
Вопрос:
Мне нужно создать программу, имитирующую перемещение муравья в сетке размером 5×5 ячеек. Представьте массив размером 5×5, в котором в позициях (2,2) и (3,3) есть пища для сбора муравьев. Каждый муравей начинает двигаться из своего гнезда, которое находится в определенной ячейке (1,4 или 4,1). Существует метод с именем move(), который я должен написать, который перемещает ant на одну ячейку при каждом вызове. Перемещение может быть горизонтальным или вертикальным. Также муравей не может переместиться на свою последнюю позицию (чтобы избежать движения вперед и назад). Также в каждой ячейке есть «точки запаха», и муравей предпочитает заходить в ячейку с наибольшими точками (поэтому вы сравниваете доступные варианты и выбираете тот, у которого самые большие точки запаха, просто так?). Теперь проблема. Они хотят, чтобы муравей совершал совершенно случайные ходы, если в ячейке нет точек запаха или точки запаха доступных ячеек равны. Итак, подведем итог:
- оператор if для проверки, в какой ячейке находится ant. Когда вы его найдете, вы знаете, где искать его предыдущий ход.
- вложенный оператор if для проверки, в какой ячейке ant был последним. Это 3 или 4 оператора if в области 5×5. Когда вы найдете последний, в котором муравей не может двигаться, вы знаете, какие ячейки сравнивать .
- вложенный оператор if между 2 или 3 ячейками, чтобы найти ту, у которой больше всего точек запаха.
- вложенный оператор 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
утверждений. Вот несколько предложений:
- Вы должны помнить, где ant находится в переменной. Я не думаю, что вам нужны какие-либо операторы if, чтобы проверить, в какой ячейке находится ant.
- Вы должны помнить, где ant был последним в другой переменной.
- Вы должны составить список окружающих точек и их точек запаха. Затем удалите из этого списка предыдущее местоположение ants.
- Используя приведенную выше коллекцию, вы можете перебирать, чтобы выбрать правильный, или, если их несколько, выбрать один наугад из коллекции.
При перемещении ant установите предыдущее местоположение в текущее местоположение, а затем обновите текущее местоположение.
Комментарии:
1. У меня есть функции и переменные, которые хранят информацию, которую вы говорите. Я попытаюсь написать часть приведенного выше кода
2. Я поместил код в свой запрос. Проверьте это
3. Кроме того, это завершенный код, и мне нужно создать только некоторые функции. К сожалению, я не могу сделать это самостоятельно