我正在尝试初始化一个2D数组,其中每个元素的类型是 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,那就是琐碎的方式。 有没有有效的方法呢?
答案 0 :(得分:219)
更短的方法如下:
private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
答案 1 :(得分:24)
这样的事情怎么样:
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'
得到的)。
表达式'1' + row * 3 + col
(row
和col
之间的变化0
和2
)只会为您提供1
中的字符到9
。
显然,如果你走得更远,这不会给你角色10
(因为那是两个字符),但它适用于3x3情况。您必须在此时更改生成数组内容的方法,例如:
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);
答案 2 :(得分:13)
易于阅读/输入。
table = new char[][] {
"0123456789".toCharArray()
, "abcdefghij".toCharArray()
};
答案 3 :(得分:5)
如果你真的想要,可以使用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说。
答案 4 :(得分:1)
你可以按照paxdiablo(12月&12; 12)的建议采用自动化,更通用的方法:
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
就效率而言,这取决于您的实施规模。
如果只是将2D数组初始化为值0-9,那么在同一语句中定义,声明和初始化会更容易,如下所示:
private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
或者,如果您计划扩展算法,那么之前的代码将证明更有效。