#java #multidimensional-array #2d #conways-game-of-life #neighbours
#java #многомерный массив #2d #conways-игра жизни #соседи
Вопрос:
Я должен подсчитать, сколько «живых» (в данном случае char: ‘O’) соседей в каждой отдельной ячейке. Каждая ячейка имеет 8 соседей. (Это для «Игры жизни» от Conway)
«Как вы можете заметить, у каждой ячейки восемь соседей. Мы считаем, что вселенная является периодической: пограничные ячейки также имеют восемь соседей. Например: Соседи из «обычной» ячейки
Если ячейка имеет правую границу, ее правым (восточным) соседом является крайняя левая ячейка в той же строке. Если ячейка имеет нижнюю границу, ее нижний (южный) сосед является самой верхней ячейкой в том же столбце. Угловые ячейки используют оба решения.» Когда ячейка является границей, а когда ячейкой является верхний угол
Ссылки представляют собой визуализации того, как проверять ячейки в случаях «исключений».
Я нашел это в Интернете:
for (int x = -1; x <= 1; x = 1) {
for (int y = -1; y <= 1; y = 1) {
int r = i y;
int c = j x;
if (r >= 0 amp;amp; r < n amp;amp; c >= 0 amp;amp; c < n
amp;amp; !(y == 0 amp;amp; x == 0)
amp;amp; currentUniverse[i][j] == 'O') {
neighbours ;
}
Однако, похоже, это не сработало…
Я не могу придумать аккуратный и, самое главное, умный / удобный / короткий фрагмент кода, чтобы проверить, сколько живых соседей имеет ячейка в позиции (скажем currentUniverse[i][j]
)…
Есть у кого-нибудь предложения, подсказки или какая-либо другая помощь?
Комментарии:
1. Позвольте мне выполнить дополнительное условие.
Ответ №1:
Попробуйте это. Я использую n в качестве размера массива (предполагается в квадрате).
int n = 4;
System.out.println();
for (int i = 0; i < n; i ) {
for (int j = 0; j < n; j ) {
int neighbours = 0;
for (int x = -1; x <= 1; x = 1) {
for (int y = -1; y <= 1; y = 1) {
if (!(y == 0 amp;amp; x == 0)) {
int r = i y;
int c = j x;
//normalize
if (r < 0) r = n - 1;
else if (r == n) r = 0;
if (c < 0) c = n - 1;
else if (c == n) c = 0;
if (currentUniverse[r][c] == 0)
neighbours ;
}
}
}
System.out.print("t" neighbours);
}
System.out.println();
}
Комментарии:
1. спасибо, счетчик, кажется, работает прямо сейчас… Теперь пришло время выяснить, как правильно хранить два мира..
2. Похоже, что мой метод, который устанавливает
newUniverse
значениеcurrentUniverse
, неисправен…. Хотя для этого я использую вложенные циклы for….