2013-09-27 7 views
0

콘웨이의 게임을 실행해야하는 몇 가지 방법이 있지만 이웃 수 계산 방법에서는 랩 어라운드를 설명하는 방법을 모릅니다. 이 작업을 수행하는 메소드를 두겠습니다. 다시 말하지만 대부분 그냥 내 neighborCount 메소드에 대한 도움이 필요합니다. 나는 다른 방법을 테스트했고 그들은 잘 작동하는 것처럼 보이지만 내가 문제 방법을 테스트 할 때 정말 가짜 값을 반환합니다.주위를 감싸고 있기 때문에 삶의 게임 프로그램을 작동시킬 수 없습니다

public class GameOfLife { 

private boolean[][] society; 
private boolean cell = true; 
private boolean empty = false; 

public GameOfLife(int rows, int cols) { 
    // Complete this method. 
    society = new boolean[rows][cols]; 
    for (int r = 0; r < society.length; r++) { 
     for (int c = 0; c < society[0].length; c++) { 
      society[r][c] = empty; 
     } 
    } 
} 
public void growCellAt(int row, int col) { 
    // Complete this method 
    society[row][col] = cell; 
} 
public int neighborCount(int row, int col) { 
    int count = 0; 
    for (int r = 0; r < society.length; r++) { 
     for (int c = 0; c < society[0].length; c++) { 
      // up and left 
      if (society[(r - 1 + row) % row][(c - 1 + col) % col] == cell) { 
       count++; 
      } 
      // up 
      if (society[(r - 1 + row) % row][c] == cell) { 
       count++; 
      } 
      // up and right 
      if (society[(r - 1 + row) % row][(c + 1 + col) % col] == cell) { 
       count++; 
      } 
      // right 
      if (society[r][(c + 1 + col) % col] == cell) { 
       count++; 
      } 
      // down and right 
      if (society[(r + 1 + row) % row][(c + 1 + col) % col] == cell) { 
       count++; 
      } 
      // down 
      if (society[(r + 1 + row) % row][c]){ 
       count++; 
      } 
      // down and left 
      if (society[(r + 1 + row) % row][(c - 1 + col) % col] == cell) { 
       count++; 
      } 
      // left 
      if (society[r][(c - 1 + col) % col] == cell) { 
       count++; 
      } 
     } 
    } 
    return count; 
} 

}

+0

을 (R - 1 + 행) % 행 '? 왜 1을 뺀거야? 당신은 1-indexing your cell or something? 그리고'row'와'col' 값은'neighborCount()'함수에 당신이 검사하고있는 셀의 좌표 나 "보드"의 차원으로 전달됩니까? 왜냐하면 그들이 전자의 것이라면 논리가 틀리게 보인다. – jedwards

+0

내 위치 주변의 8 칸에 셀이 있는지 확인하려고합니다. 제한된 예외를 설명하려고합니다. 이 경우 행과 열은 셀 im을 검사합니다. – Tejas

+0

그 질문의 더 중요한 부분은 '행 (row)'과 '콜 (col)'이었습니다 - @ paddy의 대답을보십시오. – jedwards

답변

2

귀하의 모듈이 잘못된 값을 사용하는 것으로 보인다. 비록 함수 내부의 논리가 약간 이상하기 때문에 알기는 어렵습니다.

rowcol이 테스트하려는 셀의 색인 인 경우 (다른 위치에있는 것처럼 보임) 분명히 잘못되었습니다. 실제 행 길이와 열 길이를 기준으로 수정해야합니다.

society[(r - 1 + row) % society.length][(c - 1 + col) % society[0].length] 

즉 음수의 모듈은 일반적으로 좋은 생각이 아니다 조심하십시오. 이것이 java에 적용되는지 여부는 알 수 없지만 일반적인 접근 방법은이를 피하는 것입니다. 그 주변으로 활용하려면 다음

(r + society.length - 1 + row) % society.length 
(c + society[0].length - 1 + col) % society[0].length 
+0

그 둘 중 누구도 저를 위해 정말로 운동하지 않았습니다. 리턴 할 수있는 최대 값은 8이고 계속 24와 같은 값을 유지합니다. – Tejas

+0

전체 격자를 루핑하고 모든 것을 계산하기 때문입니다. 내가 말했듯이, 당신의 논리는 이상합니다. 그것이 바로 인접한 사람들 만 셀 수 있다면 루프를 제거하십시오. – paddy

0

당신은이 같은 간단한 것을 사용하여 시도 할 수 있습니다 :

public Cell[] getNeighbours(int i, int j) { 
int i2 = i - 1, i3 = i + 1, j2 = j - 1, j3 = j + 1; 
if (i2 == -1) i2 = board.length - 1; 
if (i3 == (board.length)) i3 = 0; 
if (j2 == -1) j2 = board[i].length - 1; 
if (j3 == (board[i].length)) j3 = 0; 
return new Cell[]{board[i2][j2], board[i2][j], board[i2][j3], board[i][j2], board[i][j3], board[i3][j2], board[i3][j], board[i3][j3]}; 

} 당신이 '와 함께 할 려

관련 문제