2017-03-23 7 views
0

나는 삶의 게임에 대해 많은 질문이 있었지만 아직도 javafx에서이 방법을 올바르게 작성하는 방법을 이해할 수 없다는 것을 알고있다. 여기에 이웃을 계산하는 알고리즘을 구현하는 방법을 이해할 수 없기 때문에 작동하지 않는 코드입니다. 하지 컴파일 오류 -생명의 게임에서 이웃 방법을 계산하는 것

public void stepMethod(ActionEvent event){ 
    for (int x = 0; x < cellSize; x++){ 
     for (int y = 0; y < cellSize; y++){ 
      int neighbours = countNeighbors(x, y); 
      nextGeneration[x][y] = board [x][y]; 
      nextGeneration[x][y] = (neighbours == 3) ? true: nextGeneration[x][y]; 
      nextGeneration[x][y] = ((neighbours < 2) || (neighbours > 3)) ? false : nextGeneration[x][y]; 
     } 
    } 
    draw(); 
} 

public int countNeighbors(int x, int y){ 
    int neighbours = 0; 
    if (board [x-1][y-1]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x][y-1]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x+1][y-1]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x-1][y]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x+1][y]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x-1][y+1]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x][y+1]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if (board[x+1][y+1]){ 
     neighbours+=1; 
    }else{ 
     neighbours+=0; 
    } 
    if(board[x][y]){ 
     neighbours--; 
    } 
    return neighbours; 
} 

여기가

public void draw(){ 
    initGraphics(); 
    for(int x = 0; x < cellSize; x++){ 
     for(int y = 0; y < cellSize; y++){ 
      if(board[x][y]){ 
       gc.setFill(Color.CHOCOLATE); 
       gc.fillOval(x*cellSize,y*cellSize,cellSize,cellSize); 
      } 
     } 
    } 

} 
+1

'x-1'또는 'x + 1'이 가장자리에서 벗어날 수 있다고 가정합니다 ('y'와 동일). 실제로 실제로 잘못 되었습니까? – doctorlove

+0

이 단계 방법을 누르면 작동하지 않으며 컴파일하는 동안 실수가 있습니다. 정확히 무엇이 잘못 되었는 지 정확히 알지 못합니다. – Ira

+0

다음 컴파일시 오류 메시지를 공유하십시오. – doctorlove

답변

1

귀하의 오류

java.lang.ArrayIndexOutOfBoundsException: -1 at 
sample.Controller.countNeighbors(Controller.java:54) at 
sample.Controller.stepMethod(Controller.java:118) 

내 그리기 방법 런타임 오류입니다. 색인을 생성한다고 표시합니다 (예 : [x-1] 등). OutOfBounds입니다.

당신은 너무

if (x>0 && y>0 && board [x-1][y-1]){ 

당신은에 대해 확인해야합니다,

if (board [x-1][y-1]){ 

이 문제가 x 또는 y은 0입니다 것, 예를 들어를 elses와 IFS에 더 많은 조건을 추가 할 필요가 상한은 너무 내려 갔다.

보드 가장자리에서 무엇을 할 지 결정하십시오. 라운드 랩? 세상의 가장자리가되어 줄래? 너까지.

0

첫 번째 반복에서는 x=0 and y=0이 표시됩니다. 따라서 board[x-1][y-1]을 평가하면 ArrayOutOfBoundsException이 발생하는 [-1] [- 1] 보드가 제공됩니다.