Initialize 2D array

java, multidimensional-array

Solution

How about something like this:

for (int row = 0; row < 3; row ++)
    for (int col = 0; col < 3; col++)
        table[row][col] = (char) ('1' + row * 3 + col);

The following complete Java program:

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]);
    }
}

outputs:

1
2
3
4
5
6
7
8
9

This works because the digits in Unicode are consecutive starting at \u0030 (which is what you get from `'0'`).

The expression `'1' + row * 3 + col` (where you vary `row` and `col` between `0` and `2` inclusive) simply gives you a character from `1` to `9`.

Obviously, this won't give you the character `10` (since that's two characters) if you go further but it works just fine for the 3x3 case. You would have to change the method of generating the array contents at that point such as with something like:

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);

Problem

I am trying to initialize a 2D array, in which the type of each element is char. So far, I can only initialize this array in the follow way. ``` 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'; } } ``` I think if the array is 10*10, it is the trivial way. Is there any efficient way to do that?

Original source