2013-03-04 3 views
0

특정 유형의 그리드에 6 개의 카드를 정렬하는 프로그램을 만들려고합니다. 즉, 동일한 유형의 다른 카드 (왕자, 여왕 및 잭 인 유형) . 그리드는 4 × 4하지만 난 단지 다음과 같은 패턴 내부에 카드를 배치 할 수 있습니다 :Java 배열 - 인접한 카드

[ ][ ][x][ ] 
[x][x][x][ ] 
[ ][x][x][x] 
[ ][ ][x][ ] 

지금, 내 주요 문제는 내 방법은 카드 종류에 대한 인접 셀을 확인하려고 할 때. 0,0에서 시작하면 [row-1] [column]이 -1,0으로 변환되기 때문에 분명히 작동하지 않는지 확인하려고 시도합니다. 문제는, 어떻게 제대로 구현하는지 모르겠다.

정확히 무엇을 검색할지 (또는이 문제의 이름을 올바르게 지정하는 방법) 확실하지 않으므로이 질문이 전에 부탁 된 경우 사과드립니다.

private boolean bordersCard(int row, int column, char cardChar) 
    { 
     Candidate center = board[row][column]; 
     Candidate top; 
     Candidate bottom; 
     Candidate left; 
     Candidate right; 

     if (board[row-1][column] != null){ 
      top = board[row+1][column]; 
     } 
     else 
     { 
      top = new Candidate('?', 0); 
     } 

     if (board[row+1][column] != null){ 
      bottom = board[row+1][column]; 
     } 
     else 
     { 
      bottom = new Candidate('?', 0); 
     } 

     if (board[row][column-1] != null){ 
      left = board[row][column-1]; 
     } 
     else 
     { 
      left = new Candidate('?', 0); 
     } 
     if (board[row][column+1] != null){ 
      right = board[row][column+1]; 
     } 
     else 
     { 
      right = new Candidate('?', 0); 
     } 

     if ((center.getCardChar() == top.getCardChar()) || (center.getCardChar() == bottom.getCardChar()) || 
     (center.getCardChar() == left.getCardChar()) || (center.getCardChar() == right.getCardChar())){ 
      return false; 
     } 
     return true; 
    } 

답변

0

당신은 잘못된 검사를 방지하기 위해 if 울타리를 추가해야합니다 : 당신이 결정 것처럼

if (row > 0 && board[row-1][column] != null){ 
    top = board[row+1][column]; 
} 
+0

감사 :

isSameType(Candidate other) { if(other == null) return false; else retrun getCardChar() == other.getCardChar(); } 
당신을 경우 변경

! – Anubis

0

, 확인 [-1] [0]이 작동하지 않습니다. 그러나 존재하지 않는 슬롯을 확인할 필요가 없습니다. 배열의 처음이나 끝에서 벗어나지 않도록하십시오. 또한, 당신은 당신의 상태로 if 내부에 같은 수학 연산을 수행하고 있는지 확인 :

if ((row - 1) >= 0 && (row - 1) < board.length && board[row-1][column] != null){ 
    top = board[row-1][column]; // Use -1 to match condition. 
} 
0

를 인덱스 중 하나가 NULL에 할당 범위를 벗어나면. 후보자에서 메소드 isSameType (후보자)을 작성하십시오. 그것을했다,

if(center.isSameType(top) || center.isSameType(bottom) || ...) 
{ 
    return false; 
}