2014-01-09 59 views
0

我對java很陌生,我目前正在嘗試使用「a.i.」完成一個小型Naughts and Crosses程序。如何在枚舉中創建多個二維數組?

我決定讓計算機通過比較當前的二維char數組和已經設置了多個場景的2d數組的枚舉,然後相應地移動它。目前唯一的問題是,我不確定如何在具有特定值的枚舉中創建2d char數組。如果任何人都可以指定我將如何完成這個很棒的事情,或者我會以錯誤的方式解決問題?

有關此事的任何幫助將受到高度重視,謝謝你。

+1

你需要訪問的枚舉在多個地方?如果不是,請爲此創建一個類。我建議不要在枚舉中放置最簡單的狀態。 –

回答

0

枚舉可以被認爲是你有一個類的命名實例的靜態引用的類。

用這種方式思考,會引導您在枚舉中聲明靜態2d數組,這與您在任何類中的任何其他靜態數據一樣。

public enum MyEnum { 

Type1,Type2; 

private static int [][] _2dArr = new int[10][10]; 
static { 
    _2dArr[0][0] = 1; 
} 
} 
1

一種可能性是 「線性化」 的數據:

public enum Foo { 
    BAR("1010"), LOL("0101"); 

    private final String data; 

    private Foo(final String data) { 
     this.data = data; 
    } 

    public char[][] get2DArray() { 
     // construct from data 
    } 
} 

有了這樣一個轉變:

1 0 
0 1 => 1001 
+0

這是一個不錯的主意。謝謝你=) –

0

基本上以同樣的方式,你會做任何類。不確定你想要什麼,但這裏是一個例子。

enum Scenario { 
    ONE(new char[] { 
     { 'X', ' ', ' ' }, 
     { ' ', ' ', ' ' }, 
     { 'X', ' ', ' ' } 
    }), 
    TWO(new char[] { 
     { ' ', ' ', ' ' }, 
     { ' ', 'X', 'X' }, 
     { ' ', ' ', ' ' } 
    }); 

    private final char[] board; 

    private Scenario(char[] board) { 
     this.board = board; 
    } 

    public boolean matches(char[] gameBoard) { 
     for(int i = 0; i < board.length; i++) { 
      for(int k = 0; k < board[i].length; k++) { 
       if(board[i][k] != gameBoard[i][k]) 
        return false; 
      } 
     } 

     return true; 
    } 
} 

枚舉就是一個類和常量該類的對象。所以你可以創建方法,構造函數等。語法只是有點不同。

0

,你可以嘗試這樣的事情

public enum ArrayCheck { 
     Array1 (new int[][]{ 
     {1 , 0, 1}, 
     {1 , 0, 1}, 
     {1 , 0, 0} 
    };), 

     Array2(new int[][]{ 
     {1 , 0, 1}, 
     {1 , 0, 1}, 
     {1 , 0, 0} 
    };) 

     int[][] matrix; 
     ArrayCheck(int[][] matrix) { 
      this.matrix = matrix; 
     } 
}