初始化2D数组


72

我正在尝试初始化一个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,这是简单的方法。有什么有效的方法吗?

Answers:


27

这样的事情怎么样:

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包括在内)之间的区别只是给您一个字符从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);

谢谢!它正在工作,但是为什么“(char)('1'+ row * 3 + col)”有效?
贾斯汀

250

较短的方法如下:

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

1
不,这种方式在Eclipse中不起作用。它会使数组常量变暖,只能在初始化程序中使用
Justin

2
解决它。它已进入声明语句。
Bhesh Gurung 2012年

3
注意:要完成答案,请参考table [i] [j]:i是指第一个数组级别,j是第二个级别,基于零的..例如,在当前示例表[2] [0]中,引用为'7 '
Emmanuel Devaux

那就是什么,我需要!
Arsal Imam

我将在3和6之后休息一下,使其看起来像一个矩阵。
富兰克林·于

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(在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'}};

或者,如果您打算扩展该算法,那么以前的代码将证明更加有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.