初始化二维数组

77

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

5个回答

265

简单的方法是按照以下方式操作:

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

1
不行,这种方式在 Eclipse 中不起作用。它会提示数组常量只能在初始化器中使用。 - Justin
2
修复了。它必须放在声明语句中。 - Bhesh Gurung
3
好的,我会尽力进行翻译。以下是需要翻译的内容:NB: 为了回答问题,请注意:当引用table[i][j]时,i代表第一层数组,j代表第二层数组,从0开始计数。例如,在当前示例中,table[2][0]指的是“7”。 - Emmanuel Devaux
那就是我需要的!! - Arsal Imam
我会在第3和第6个位置打断,使它看起来像一个矩阵。 - Franklin Yu

29

这样行吗:

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 (其中你将rowcol02 之间改变)只会给你一个从 19 的字符。

显然,如果你进行更多的操作,这不会给你字符 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);

1
谢谢!它正在工作,但为什么 "(char) ('1' + row * 3 + col)" 起作用? - Justin

15

易于阅读/输入。

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

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所说的做。

我认为存在不匹配的错误,无法将int赋值给char数组类型。 - Justin

2
您可以按照paxdiablo(在2012年12月)的建议采用自动化、更加灵活的方法进行操作:
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'}}; 或者,如果您计划扩展算法,则先前的代码将证明更加高效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接