2014-01-09 65 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; 
     } 
}