2011-09-12 6 views
0

안녕하세요 비교 세포와는 자바 : 배열

나는 무작위로 생성 된 부울 값의 행렬을 가지고, 내 질문을 읽을 시간을내어 주셔서 감사합니다, 제가하고 싶은 행렬의 각 셀을 비교입니다 그 주변으로, 주변에 나는 즉각적인 왼쪽, 오른쪽, 위, 아래 및 모든 4 개의 대각선으로의 셀을 의미합니다. 주변의 셀이 참이라면 false, "0"을 반환해야합니다. 그래서 개별 셀을 둘러싼 참 및 거짓 셀의 수를 더할 수 있습니다. 따라서 출력은 "1 + 1 + 1 + 0 등. " 만약 내가 이것을 잘못 설명해 주시면 죄송합니다. 필요한 정보가 더 있으면 알려주세요.

+0

내 자신의 버전의 Minesweeper를 코딩 할 때 주변 셀을 검사하기 위해 중첩 된 for-loops에 의지했다고 생각합니다. –

답변

3

이것을 구현하는 가장 간단한 방법은 두 개의 for 루프를 x와 y에 대해 [-1, 0, 1] 값의 배열로 중첩시키는 것입니다. 행렬의 경계를 고려하고 현재 셀의 값을 추가하지 마십시오.

하나의 참고 사항 : 코드를 두 가지 방법으로 나누는 것이 좋습니다. 하나는 루핑을 수행하고 다른 하나는 좌표로 호출하는 반면 다른 하나는 가장자리 사례 검사를 수행하고 결과를 반환합니다.

3

당신은 크기 3의 커널, 매트릭스에 two-dimensional convolution을 적용하고 있습니다 : 당신이 합계에서 현재 셀을 포함하는 것을 의미하는 경우 (

1 1 1 
1 0 1 
1 1 1 

, 중앙 1 대신해야 0).

커널을 하드 코딩하거나 더 일반적이며 더 일반적인 코드의 경우 3x3 커널을 입력으로 허용 할 수 있습니다. 일반적인 해결책이 필요하지 않다면 syrion의 조언을 따를 수 있습니다. 부울을 1과 0으로 변환하려면 다음과 같이 할 수 있습니다 : cellNum = cellValue ? 1 : 0, 예를 들면.