初始化二维数组
我试图初始化一个二维数组,其中每个元素的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
的字符。
显然,如果你走得更远,这不会给你10
angular色(因为那是两个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,以前的代码会更有效。