web-dev-qa-db-ja.com

Javaでの二重配列の初期化

Java の本を読んでいて、double型の配列が今まで見たことのない方法で初期化される例を見つけました。どのタイプの初期化であり、他のどこで使用できますか?

double m[][]={
    {0*0,1*0,2*0,3*0},
    {0*1,1*1,2*1,3*1},
    {0*2,1*2,2*2,3*2},
    {0*3,1*3,2*3,3*3}
};
23
Prateek

これはarray initializer syntaxであり、配列型の変数を宣言するときに右側でのみ使用できます。例:

int[] x = {1,2,3,4};
String y = {"a","b","c"};

変数宣言のRHSを使用していない場合は、代わりに配列コンストラクターを使用します。

int[] x;
x = new int[]{1,2,3,4};
String y;
y = new String[]{"a","b","c"};

これらの宣言の効果はまったく同じです。新しい配列が割り当てられ、指定された内容で構築されます。

あなたの場合、実際にはテーブルをプログラムで指定する方が明確です(繰り返しは少なくなりますが、少し簡潔になります)。

double[][] m = new double[4][4];

for(int i=0; i<4; i++) {
    for(int j=0; j<4; j++) {
        m[i][j] = i*j;
    }
}
25
nneonneo

次のように、保持する実際の値を右側に中括弧で書き込むことにより、配列を初期化できます。

String[] strArr = { "one", "two", "three"};
int[] numArr = { 1, 2, 3};

同様に、2次元配列またはarray-of-arraysは配列を値として保持しますなので、

String strArrayOfArrays = { {"a", "b", "c"}, {"one", "two", "three"} };

あなたの例はまさにそれを示しています

double m[][] = {
    {0*0,1*0,2*0,3*0},
    {0*1,1*1,2*1,3*1},
    {0*2,1*2,2*2,3*2},
    {0*3,1*3,2*3,3*3}
};

ただし、数値の乗算も実行され、次と同じです。

double m[][] = { {0, 0, 0, 0}, {0, 1, 2, 3}, {0, 2, 4, 6}, {0, 3, 6, 9} };
2
SGal

これは配列初期化子と呼ばれ、 Java仕様10.6 で説明できます。

これは任意の配列の初期化に使用できますが、初期化にのみ使用できます(既存の配列への割り当てではありません)。それに関するユニークなことの1つは、配列の次元を初期化子から決定できることです。配列を作成する他の方法では、手動で番号を挿入する必要があります。多くの場合、これにより、プログラマーが初期化子を変更してディメンションの更新に失敗したときに発生する些細なエラーを最小限に抑えることができます。

基本的に、初期化子は正しいサイズの配列を割り当て、リスト内の各要素を左から右に評価します。また、仕様では、要素タイプが配列である場合(例:double []の配列がある場合)、各要素はそれ自体が初期化リストである可能性があるため、外側のブレースのセット、および各行には内側のブレースがあります。

1
Cort Ammon

Double Postを受け入れることができる場合、この投稿は役に立ちます: 1行のArrayListの初期化

List<Double> y = Arrays.asList(null, 1.0, 2.0);
Double x = y.get(1);
1
C.Lechner

double m[][]は、多次元配列と呼ばれる配列の配列を宣言します。

m[0]は、0 * 0,1 * 0,2 * 0,3 * 0を含むサイズ4の配列を指します。単純な数学は、値が実際に0,0,0,0であることを示しています。

2行目もサイズが4の配列で、0、1、2、3を含んでいます。

等々...

あなたの本のこの複数の形式は、0 * 0が行0列0、0 * 1が行0列1などであると表示することだったと思います。

1
sara

Java配列 を作成および初期化するためのショートカット構文です。

0
Prabhaker

私の経験では、配列に固定値が必要なときにこの種の初期化を行います。それをクラスで宣言しますが、onCreateメソッドでは宣言しません。onCreateメソッドでは宣言できないからです。

0
fullMoon