В качестве домашнего задания мне нужно представить ячейки во вселенной, где '*' указывает на живую ячейку, а пустое место (' ') — на мертвую. Для определения статуса конкретной клетки в следующих поколениях используются следующие правила:
Например, рассмотрим следующие массивы:
int[][] beehive = {{0,0,0,0,0,0}, {0,0,1,1,0,0}, {0,1,0,0,1,0},
{0,0,1,1,0,0}, {0,0,0,0,0,0}};
int[][] toad = {{0,0,0,0,0,0}, {0,0,1,1,1,0}, {0,1,1,1,0,0}, {0,0,0,0,0,0}};
getNextGenCell(beehive, 1, 3) returns 1, while getNextGenCell(beehive, 3, 1)
returns 0.
getNextGenCell(toad, 0, 3) returns 1, while getNextGenCell(toad, 2, 3)
returns 0.
Я смущен тем, как действовать с этим кодом. Любое предложение?
Мой код должен иметь следующий заголовок, где int x представляет подмассив, а int y представляет элемент внутри этого подмассива. Код возвращает 1, если ячейка жива в следующем поколении, или 0 в противном случае.
// A method that gets the cell from the next generation
public static int getNextGenCell(int[][] validUniverse, int x, int y) {
}
@DanForbes Я не понимаю, как начать писать код. Я ищу любое предложение или совет о том, как действовать.
Для заданных координат x, y, как бы вы определили соседей? Сначала разработайте алгоритм, а затем попытайтесь написать соответствующий код.
@KevinO Я думал о вложенных циклах for, но это кажется таким неэффективным.
@Elizabeth - я бы посоветовал вам посетить рабочее время и поработать с ТА или вашим профессором по таким базовым вопросам.
Не начинайте с код, начните с разработки алгоритма; поработайте сначала на бумаге. Вложенные циклы могут быть необходимы, но, поскольку область поиска мала, они вряд ли будут неэффективными. Концептуально не может быть проверено более 8 ячеек, не так ли? И, пожалуйста, помните, что оптимизация идет после первоначального решения.
Вложенные циклы for могут показаться «неэффективными», но иногда «неэффективное» решение является правильным решением. Это один из тех моментов.




Сначала вы должны определить, как вы хотите, чтобы логика вашей программы работала. В этом случае вы знаете, что при обходе двумерного массива есть 8 различных случаев. Это включает:
Вам понадобятся операторы if для каждого из этих случаев. Ниже приведен пример кода для случая «остальная часть массива»:
if (x!=0&&y!=0&&x!=bees.length-1&&y!=bees[x].length-1&&bees[x][y+1]==1||bees[x][y-1]==1||bees[x+1][y]==1||bees[x-1][y]==1)
Теперь просто закончите остальные 7 случаев, подсчитайте количество «живых» или «мертвых» ячеек и соответствующим образом измените массив. Дайте знать, если у вас появятся вопросы.
Люди здесь могут быть немного «придирчивыми», когда дело доходит до ответов на вопросы. Вы хорошо объясняете свое домашнее задание, но вам нужно объяснить, что именно вас смущает в том, как действовать дальше. Инструкции, которые вы предоставили, кажутся ясными, так что же вы в них не понимаете? Это также помогает рассказать людям, что вы пробовали и почему это не дало вам желаемого или ожидаемого результата. Удачи!