2017-03-23 12 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) 

私のdrawメソッド実行時エラーです。あなたのインデックス([x-1]など)はOutOfBoundsになりました。あなたは、IFSでさらに条件を追加して、よそ、例えば

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

が問題になる必要がある

はあなたが反対を確認する必要がありそう

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

xまたはy 0であります上限はあまりにも下になります。

ボードの端で何をするかを決めます。ラップラウンド?それを世界の端にしますか?あなた次第。

0

最初の反復では、x=0 and y=0が表示されます。だからboard[x-1][y-1]を評価するとボード[-1] [ - 1]が与えられ、ArrayOutOfBoundsExceptionが発行されます。

関連する問題