初始化二维数组
我试图初始化一个二维数组,其中每个元素的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 (你可以改变0和2之间的row和col ),简单地给你一个从1到9的字符。 
 显然,如果你走得更远,这不会给你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,以前的代码会更有效。