2014-04-14 3 views
1

나는 아래의 방법을 수정해야합니다 : 그것은 짝수 인 경우에자바 2D 배열 조작

private final static int NUM = 6; 

public void fun(int[][] grid) { 
    for(int row = 0; row < NUM; row++) { 
     for(int col = 0; col < NUM; col++) { 
      if((grid[row][col] % 2) == 0) { 
       grid[row][col] = 0; 
      } 
     } 
    } 
} 

이 방법을 확인하고 만약 그렇다면 그것은 0 간단한와 그 값을 대체합니다.

지금이 동시에 나는 약 한 시간 동안 이것에 대해 생각 해봤 0

의 값을 보유 대각선 이웃의 수의 값을 대체하기 위해 각 셀을 지시 있도록 수정해야

많은 다른 솔루션으로, 대부분 예외를 벗어났습니다. 나는이 문제를 어떻게 해결해야할지 모르겠다.

아래의 격자 배열에 대한 정수를 사용하여 코드가 맞으면 picture 하단에 표시된 숫자가 재현됩니다.

enter image description here

+0

배열 색인에 따라 다르지만 이웃 수도 많거나 적을 수 있습니다. 예를 들어, grid [0] [0]은 오직 하나의 대각선 이웃입니다. 나는 그 일을 설명하는데 어려움을 겪었고, 배열 예외를 벗어났다. 그리고 나는 그들 대부분이 4 개의 대각선 이웃을 가지고 있다고 확신합니다. 그것은 단지 대각선 이웃입니다. –

+0

OP를 편집했습니다. 확인 해봐. 올바른 코드가있는 그림의 맨 위에있는 배열을 사용하면 그림의 아래쪽에 숫자가 생깁니다. –

답변

0

은 문제가 무엇인지, 그냥 if 문 때문에 얼마나 많은 사람들이 0 동일한 지 확인 최대 4 개 가능한 이웃이있을 수처럼 넣어해야합니다. 하지만 이것만으로는 충분하지 않습니다. 각 if 문에 하나 이상의 조건을 추가하면됩니다. 조건은 검사하려는 이웃이 가능한지 아닌지입니다.

즉 총 4 개의 이웃입니다.
1 대각선 이웃 : x-1, y-1
2 대각선 이웃 : x-1, y+1
3 대각선 이웃 : x+1, y+1
4 대각선 이웃 : 기본 셀의 좌표는 X, 다음 Y 경우 x+1y-1

이들은 모두 4 개의 대각선 이웃 좌표이지만 확인해야 할 마지막 사항은 그들이 채권에서 벗어나는지 여부입니다. 예를 들어 1 대각선 이웃을 확인하기 위해 내가 할 것 :

if((x-1)>0 && (y-1)>0){ 
    //and then check here if that block is = `0` 
} 

당신은 그들이 NUM 미만 여부를 확인해야합니다 y+1x+1을 말하거나 가진 다른 위해를. 마찬가지로 나는 3 대각선 이웃을 확인하려면 :

if((x+1)<NUM && (y+1)<NUM){ 
    //and then check here if that block is = `0` 
} 

업데이트 :What do you mean by check here if that block is = 0?

당신이이 대각선 주변 블록은 당신이해야 할 것입니다 0에 동일인지 아닌지 확인하려면 그것은 반복에서.여기 방법 :

public void fun(int[][] grid) { 
    for(int row = 0; row < NUM; row++) { 
     for(int col = 0; col < NUM; col++) { 
      if((grid[row][col] % 2) == 0) { 
       grid[row][col] = 0; 
      } 
     } 
    } 

    for(row = 0; row< NUM; row++){ 
     for(int col = 0; col < NUM; col++) { 
      int count = 0; 

      // To check for the 1st Diagonal Neighbor 
      if((row-1)>0 && (col-1)>0){ 
       if(grid[row-1][col-1]==0){ 
        count++; 
       } 
      } 

      //Similarly for 2nd, 3rd and 4th Diagonal Neighbors 

      //and then 
      grid[row][col]=count; 
     } 
    } 

} 

업데이트 2 :
코드 블록은 다음과 같이 될 것이다 3 대각선 이웃을 말할 경우 :

if((row+1)<NUM && (col+1)<NUM){ 
    if(grid[row+1][col+1]==0){ 
     count++; 
    } 
} 

대답 최종 개인 정적 INT NUM = 6 ;

public void fun(int[][] grid) { 
    for(int row = 0; row < NUM; row++) { 
     for(int col = 0; col < NUM; col++) { 
      int counter = 0; 

      if((row - 1) > 0 && (col - 1) > 0) { 
       if(grid[row - 1][col - 1] == 0) { 
        counter++; 
       } 
      } 

      if((row - 1) > 0 && (col + 1) < NUM) { 
       if(grid[row - 1][col + 1] == 0) { 
        counter++; 
       } 
      } 

      if((row + 1) < NUM && (col - 1) > 0) { 
       if(grid[row + 1][col - 1] == 0) { 
        counter++; 
       } 
      } 

      if((row + 1) < NUM && (col + 1) < NUM) { 
       if(grid[row + 1][col + 1] == 0) { 
        counter++; 
       } 
      } 

      grid[row][col] = counter; 
     } 
    } 
} 
+0

나는 당신이 말하는 것을 이해하고 있다고 생각합니다. 내가 이해할 수 있도록 코드 스 니펫을 작성해 주시겠습니까? –

+0

@NoahMatisoff 마지막 블록을 확인한 다음 의문을 제기하십시오. –

+0

블록이 = 0이면 여기에서 확인하십시오. –