76

我正在尝试初始化一个二维数组,其中每个元素的类型都是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,这是微不足道的方式。有没有有效的方法来做到这一点?

4

5 回答 5

262

较短的方法是按如下方式进行:

private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
于 2012-12-12T04:45:36.233 回答
28

像这样的东西怎么样:

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介于两者之间02包括在内)只是为您提供了一个从1to的字符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);
于 2012-12-12T04:47:46.270 回答
15

易于阅读/输入。

  table = new char[][] {
      "0123456789".toCharArray()
    , "abcdefghij".toCharArray()
  };
于 2012-12-12T04:51:20.493 回答
6

如果你真的想,你可以使用 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所说的去做。

于 2012-12-12T04:47:35.943 回答
2

您可以遵循 paxdiablo(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'}};

或者,如果您打算扩展算法,那么前面的代码会证明更高效。

于 2014-08-12T07:19:13.567 回答