2013-07-03 28 views
-1

我在我最新的學校實驗室裏碰壁了。我們正在使用數組重新制作康威的生活遊戲,他們希望我們將一個數組作爲原始數據,並使這些數據發生在另一個數組中。在康威的生活遊戲中使用陣列

雖然我被困在了鄰居的邏輯!我不太確定語法或實現的真實性,以檢查數組中的鄰居或下一個索引是否存在。

這裏是我的源代碼到目前爲止(不得不復制並粘貼由於低REP)

import java.util.Arrays; 

public class life { 
    public static void main(String[] args) { 
     Game(); 
    } 

    public static void Game() { 
     char [][] board; //original board 
     board = new char[5][5]; 

     char [][] boardCopy; 
     board = new char [5][6]; // board to use as a replacement. 

     for (int i = 0; i < 5; i++) { //loops that makes the original board. 
      for (int j = 0 ; j < 5; j++) { 
       int x = (int)(Math.random() * 11); 
       if (x <= 5) { board[i][j] = 'X'; } 
       if(x > 5) { board[i][j] = '.'; } 
      } 
     } 

     printTable(board); 
    } 

    public static void printTable(char[][] x){ 
     //prints the arrays in a table. 
     for(int i = 0; i < 5; i++) System.out.println(Arrays.toString(x[i])); 
    } 
} 
+0

定義它之後永遠不會使用'boardCopy'。那可能是一個很好的開始。之後,通過在網格紙上佈置你的棋盤,考慮哪些數組索引將構成康威遊戲中的鄰居。 – cjc343

回答

2

理解這個問題的最好辦法是從你的陣列採取抽樣元素,讓我們把它

board[i][j] 

我將圖象它的方式如下:

在陣列(未在邊緣或角落)具有8個鄰居,無論是活的還是死的MIDDLE任何隨機元素。只是想象一個由相同大小的正方形包圍的正方形。它與左,右,上,下,左上,右上,左下和右下相鄰。

你的工作僅僅是循環這8個元素並檢查它們的狀態(isAlive()方法是合乎邏輯的)。

那麼你如何表示代碼中的每個元素?會考慮鄰居的權利。他與你的陣列(我們稱之爲i)在同一「行」上,但他是右邊(j + 1)上的一個「列」。因此,他將表示爲

board[i][j + 1] 

同樣,鄰居的左邊是

board[i][j - 1] 

這是否有意義?

然後爲了完成這個項目,你只需要確保你正在檢查的鄰居的元素不在邊上,如果是這樣的話:確保不要檢查你的數組邊界,會得到一個ArrayIndexOutOfBoundsException。