프로그래밍 클래스를 사용했는데 제대로되지 않은 이전 프로그램을 다시 방문합니다. 이 게임은 Game of Life 프로그램이며 코드 정리에 대한 질문이 있습니다.요소가 부울 배열에 존재하는지 확인
인접 요소의 부울 값이 true
또는 false
인지 확인하기 전에 배열 요소가 경계에 있는지 확인해야합니다. firstGen[0][0]
의 왼쪽 위 (한 행 위쪽, 왼쪽 하나의 열)가 범위 내에 있는지 확인하는 설명이 있습니다. 요소가 경계에 있는지 확인하거나 if
문당 &&
개의 조건을 사용하지 않고 요소 검사를 지정된 배열의 경계로 제한하는보다 쉽고 세련된 방법이 있습니까?
여기까지는 처음으로 if
문을 변경 했으므로 다른 곳에서는 오류가있을 수 있습니다. 나는 또한 다른 이웃들에 대한 경계 검사를 제외했다.
public static boolean[][] generation(boolean[][] firstGen)
{
int length = firstGen.length;
boolean[][] newGen = new boolean[length][length];
for (int j = 0; j < firstGen[0].length; j++)
{ for (int i = 1; i < firstGen.length; i++)
{
int count = 0;
if ((i-1 >= 0) && (i-1 < length) && (j-1 >= 0) && (j-1 < length)) //top-left element exists
{ if (newGen[i-1][j-1] == true) count++; } //increment `count` if top-left element is true
if ((newGen[i][j] == false) && (count == 3)) newGen[i][j] = true;
else if ((newGen[i][j] == true) && (count == 1)) newGen[i][j] = false;
else if ((newGen[i][j] == true) && (count > 3)) newGen[i][j] = false;
else break;
}
}
return newGen;
}
+1 갑자기 간단합니다 .--) 나는 그가 다음 단계에서 필요로하는 것을 추가로 추천 할 것입니다 : 코드 반복없이 모든 이웃을 통과하는 우아한 방법. –
@assylias 때때로 자바 솔루션은 매우 간단합니다. 그들은 일을 불필요하게 복잡하게 만들기 위해 머리를 벽에 부딪히는 것을 원하는 종류의 tat입니다.또한 진실하고 틀린 부울 조건에 대한 알림을 보내 주셔서 감사드립니다. 다시 말하지만, 그런 데드. – rice2007
@Marko 아주 잘 풀리지는 못하지만, 다음 단계도 처리 할 정신적 인 해결책이 있습니다. 중첩 된 'for'루프를 생각하고 있습니다. – rice2007