0

まず、コードは次のとおりです。

public class Test{

   public static void main(String args[]){

    short[][] b = new short[4][4];
    short[][] big = new short[2][2];
    short b3 = 8;
    short b2 [][][][] = new short [2][3][2][2];

   // insert code here that will allow the code to compile

     }

}

これは教科書の問題です。間違っている2つの答えは次のとおりです。

b2[0][1][1] = b;

ここでの説明は、1次元配列が期待される場所に2次元配列を割り当てようとすることです。誰かがこれを説明できますか?1次元配列がコードのどこにあるのかまったくわかりません。

b2[0][2][1] = b[1][0];

この間違った答えの説明は、短い配列が予想される場所にプリミティブshortを割り当てようとすることです。この答えに原始的なショートが見当たらないので、私はこれに困惑していますか?

4

3 に答える 3

3

Javaでは、多次元配列は実際には配列の配列です。

配列にインデックスを付けるたびに(つまり、[i]を後に置く)、次元が失われるかのように考えることができます。

b

2次元配列を与えます。

b[i] 

1次元配列を提供し、

b[i][j]

shortあなたに(プリミティブです)を与えます

 b2[0][1][1]

また、1次元配列が得られるはずですが、そこに2次元配列を配置しようとしているため、問題が発生します。

2番目の間違った答えについてb[i][j]は、プリミティブを提供します。これが、1次元配列があるべき場所に配置しようとしているものです。

于 2012-12-04T05:36:41.910 に答える
1

それを見る簡単な方法は、配列マーカーを消すことです。最初のタイプをと考えてください b[][][][]。これでb[0][1][1]、最初の3つの[]を効果的に「取り消し」てb[]、ショートパンツの配列だけを残します。これを残りの部分に適用して、なぜそれらが間違っているのかを確認できます。

私が生徒に非常にうまく機能するポインタと配列を教えるために使用するトリック。

于 2012-12-04T05:36:49.060 に答える
1

これがb2配列の構造です。

xxxxxxxxxxxxxxxxxx P [xx] xxx xxxxxxxxxxxx

xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx

2つの要素を持つ1次元配列であるb2[0][1][1]の位置にある配列を取得しようとしています。ただし、「b」は2次元配列です。そのため、エラーがスローされます。

于 2012-12-04T06:23:30.660 に答える