Java 初始化二维数组

Java 初始化二维数组,java,multidimensional-array,Java,Multidimensional Array,我试图初始化一个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[

我试图初始化一个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,这是一种简单的方法。
有什么有效的方法可以做到这一点吗?

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

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

如果您确实愿意,可以使用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));
}
char table[][]table=新字符[行][col];
对于(int i=0;i

或者照贝什说的做

像这样的东西怎么样:

for (int row = 0; row < 3; row ++)
    for (int col = 0; col < 3; col++)
        table[row][col] = (char) ('1' + row * 3 + col);
这是因为Unicode中的数字从\u0030开始是连续的(这是从
'0'
中获得的)

表达式
'1'+行*3+列
(其中
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);
String[]table=新字符串[5][5];
对于(int行=0;行<5;行++)
for(int col=0;col<5;col++)
表[行][col]=String.format(“%d”,行*5+col+1);
易于阅读/键入

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

您可以按照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);
for(int行=0;行<3;行++)
for(int col=0;col<3;col++)
表[行][col]=(字符)('1'+行*3+列);
就效率而言,这取决于实施的规模。 如果只是简单地将2D数组初始化为值0-9,那么在同一语句中定义、声明和初始化就会容易得多,如下所示:
private char[]table={{{'1',2',3'},{'4',5',6'},{'7',8',9'}


或者,如果您计划扩展该算法,那么前面的代码将证明更高效。

不,这种方法在Eclipse中不起作用。它加热数组常量,只能在初始值设定项中使用。它已经进入声明语句中。注意:要完成答案,请参考表[i][j]:我参考第一个数组级别,j参考第二个级别,以零为基础。。例如,在当前示例表[2][0]中,引用了“7”,这就是我需要的!!我会在3和6之后中断,使它看起来像一个矩阵。我认为有一个不匹配的错误,不能将int赋值给char arraythanks的类型!它在工作,但为什么“(字符)('1'+行*3+列)”工作?
  table = new char[][] {
      "0123456789".toCharArray()
    , "abcdefghij".toCharArray()
  };
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
    table[row][col] = (char) ('1' + row * 3 + col);