初始化二维数组

我试图初始化一个二维数组,其中每个元素的types是char 。 到目前为止,我只能按以下方式初始化这个数组。

public class ticTacToe { private char[][] table; public ticTacToe() { table[0][0] = '1'; table[0][1] = '2'; table[0][2] = '3'; table[1][0] = '4'; table[1][1] = '5'; table[1][2] = '6'; table[2][0] = '7'; table[2][1] = '8'; table[2][2] = '9'; } } 

我认为如果数组是10 * 10,这是微不足道的方法。 有没有有效的方法来做到这一点?

怎么样这样的事情:

 for (int row = 0; row < 3; row ++) for (int col = 0; col < 3; col++) table[row][col] = (char) ('1' + row * 3 + col); 

以下完整的Java程序:

 class Test { public static void main(String[] args) { char[][] table = new char[3][3]; for (int row = 0; row < 3; row ++) for (int col = 0; col < 3; col++) table[row][col] = (char) ('1' + row * 3 + col); for (int row = 0; row < 3; row ++) for (int col = 0; col < 3; col++) System.out.println (table[row][col]); } } 

输出:

 1 2 3 4 5 6 7 8 9 

这是可行的,因为Unicode中的数字是从\ u0030开始的(这是从'0'得到'0' )。

expression式'1' + row * 3 + col (你可以改变02之间的rowcol ),简单地给你一个从19的字符。

显然,如果你走得更远,这不会给你10angular色(因为那是两个angular色),但是对于3×3的情况来说,这个angular色很好。 你将不得不改变生成数组内容的方法,比如像这样的东西:

 String[][] table = new String[5][5]; for (int row = 0; row < 5; row ++) for (int col = 0; col < 5; col++) table[row][col] = String.format("%d", row * 5 + col + 1); 

更短的方法是这样做:

 private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}}; 

易于阅读/input。

  table = new char[][] { "0123456789".toCharArray() , "abcdefghij".toCharArray() }; 

如果你真的想要,你可以使用for循环。

 char table[][] table = new char[row][col]; for(int i = 0; i < row * col ; ++i){ table[i/row][i % col] = char('a' + (i+1)); } 

或者做什么bhesh说。

你可以按照什么paxdiablo(12月12日)build议自动化,更多function的方法:

 for (int row = 0; row < 3; row ++) for (int col = 0; col < 3; col++) table[row][col] = (char) ('1' + row * 3 + col); 

就效率而言,这取决于您的实施规模。 如果仅仅是将二维数组初始化为值0-9,那么在同样的语句中定义,声明和初始化就更容易了: private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};

或者,如果您打算扩展algorithm,以前的代码会更有效。