-1
class B {
    public static void main(String a[])
    {
        int x;
        String aa[][]= new String[2][2];
        aa[0]=a;
        x=aa[0].length;
        for(int y=0;y<x;y++)
            System.out.print(" "+aa[0][y]);
    }
}

コマンドラインの呼び出しは

>java B 1 2 3

オプションは

1.)0 0

2.)1 2

3.)0 0 0

4.)1 2 3

配列はで宣言されて[2][2]いるので、2番目のオプションは正しいと言いました。したがって、のようなものにすることはできません[0][2]。しかし、答えは1 2 3です。誰かがこれを説明します、これはどのように起こりますか?

4

2 に答える 2

7

aa[0]は配列の配列であるため、プログラムの引数は配列に格納されaaます。

したがって、プログラムはメソッドの引数を実際に繰り返しmainます。印刷します1, 2, 3(気にしませんaa[1])。

int x;
String aa[][]= new String[2][2]; // create an matrix of size 2x2
aa[0]=a; // store the program arguments into the first row of aa 
x=aa[0].length; // store the length of aa[0] which is the same as a
for(int y=0;y<x;y++) // iterate over aa[0] which is the same as a
    System.out.print(" "+aa[0][y]);

機能的には次のものと同じです。

for (int i = 0; i < a.length; ++i)
    System.out.print(" " + a[i]);
// or even
for (String str: a)
    System.out.print(" " + str);

編集

それ以来彼の答えを削除した誰かが述べたように(あなたがそれを削除している間、私はそれを賛成していました)、java多次元配列はギザギザ配列です、これは多次元配列がである必要がないことを意味します同じサイズの場合、行1と行2に2つの異なるサイズを設定できます。つまり、aを宣言してString[2][2]も、行を再割り当てするときに行を2列に制限する必要があるという意味ではありません。

String[][] ma = new String[3][2];
ma[0] = new String[] {"a", "b"};
ma[1] = new String[] {"a", "b", "c", "d"}; // valid
String[] foo = new String {"1", "3", "33", "e", "ff", "eee"};
ma[2] = foo; // valid also
于 2012-11-30T15:59:04.450 に答える
0

変数aaは、単なる多次元配列ではなく、文字列の配列の配列として宣言されます。設定aa[0] = aすると、配列の配列の最初の要素が、引数として渡された文字列配列に設定されます。したがって、アイテムを反復処理するときは、ステートメントaa[0]でそこに配置されたアイテムを反復処理しています。aa[0] = a

于 2012-11-30T16:08:50.190 に答える