76

各要素の型がcharである 2D 配列を初期化しようとしています。これまでのところ、この配列は次の方法でしか初期化できません。

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包括的である場合)は単にあなたにから1までの文字を与えます9

明らかに、これはさらに進んだ場合に文字を提供しません102文字なので)が、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 に答える