IT転職・プログラミングスクール

正しい配列宣言はどれだ?【Java Silver例題】

Java Silver 例題

この記事はOracle Java SE8 Silver(1Z0-808)の対策講座です。

今回は配列宣言についてです。

Java Silverでは出題確率60%ほどとやや高め問題です。

しっかりと対策をしましょう。

 

問題:配列宣言について

早速ですが、次の2問を解いてみてください。

問1

 

問2

 

いかがでしょうか?

 

答えは
問1C
問2ACFです。

 

Java Silver 問題集
参考記事【Java Silver問題集】高頻出・間違えやすい問題たち

この記事は、Oracle Java SE8 Silver(1Z0-808)の対策講座です。 出題確率が高く、間違いやすい例題が解説付きで100問以上あります。   Java Silver 問 ...

続きを見る

 

配列宣言のポイントと解説

配列宣言のポイントは次の通りです。

配列宣言のポイント

●配列の次元数は左辺と右辺で一致しなければならない

●次元数の宣言は型の後でも、変数名の後でもOK
(混合でもOK)

●要素数の指定は右辺でのみOK

要素数を指定した場合、同時に初期化できない

2次元以上の配列の要素数指定では、その次元以下の全次元の要素数が指定されていないとコンパイルエラー

 

1つずつポイントを解説していきます。

配列の次元数は左辺と右辺で一致しなければならない

配列宣言の基本構文は次のように左辺で変数宣言を行い右辺で配列オブジェクトを生成します。

配列宣言の基本構文次元数は大カッコ []の数で決まり配列宣言の次元数と配列オブジェクトの次元数をそろえないとコンパイルエラーになります。

int a[][] = new int[][]{};    //OK
int a[] = new int[][]{};      //コンパイルエラー
int a[][] = new int[]{};      //コンパイルエラー

 

次元数の宣言は型の後でも、変数名の後でもOK(混合でもOK)

上の例では左辺の次元数の宣言を変数名の後で行っていますが、大カッコ []は変数型の後でも問題ありません。

また、変数型と変数名の両方の後に大カッコ[]があっても問題ありません。

int[] a = new  in[]{};        //OK
int[] a[] = new in[][]{};   //OK

このとき、次元数は変数型の後の変数名の後の大カッコ[]の数の合計になります。

 

要素数の指定は右辺でのみOK

要素数の指定は右辺のオブジェクト生成のときのみ行うことができます。

次のように左辺で要素数を指定するとコンパイルエラーになります。

int a[] = new int[2];  //OK
int a[2] = new int[];  //コンパイルエラー

 

要素数を指定した場合、同時に初期化できない

上記のように要素数を指定した場合、オブジェクト生成と同時に初期化ができないことに気を付けてください。

どういうことかというと、右辺の最後の中カッコ{}は初期化するデータを表しており要素数が指定されたときに中カッコ{}があるとコンパイルエラーになります。

int a[] = new int[2];      //OK
int a[] = new int[2]{};   //コンパイルエラー

 

2次元以上の配列の要素数指定では、その次元以下の全次元の要素数が指定されていないとコンパイルエラー

このポイントは少し複雑ですが、例をみてもらえれば簡単に理解することができます。

複数の次元数を持つ配列宣言の場合、各次元の要素数をすることができます。

しかし、その次元の要素数を指定するにはその次元以下の全次元の要素数が指定されていないとコンパイルエラーになります。

次の例は2次元の配列ですが、1次元目の要素数は指定せず、2次元目の要素数だけ指定しているのでコンパイルエラーになります。

int a[][] = new int[][2];     //コンパイルエラー
int a[][] = new int[2][2];   //OK

次の例も同様に、1次元目と3次元目の要素数は指定していますが、間の2次元目の要素数が指定されていないのでコンパイルエラーになります。

int a[][][] = new int[2][][3];      //コンパイルエラー
int a[][][] = new int[2][2][3];   //OK

 

解説

ここまでのポイントを全ておさえていれば、今回の問題は簡単に解くことができます。

AとBは左辺でそれぞれ、変数型と変数名の後で大カッコ[]を書いていますが、どちらも問題ないので正しいコードです。

Cは左辺で大カッコ[]を2つ並べているので2次元です。
しかし、右辺では大カッコ[]が1つしかないので、1次元です。
左辺と右辺の次元数が一致していないので、このコードはコンパイルエラーになります。

Dは左辺の変数型と変数名の後に1つずつ大カッコ[]を書いていますが、問題ありません。
このとき、次元数は大カッコ[]の数の合計になるので、2次元です。
右辺では大カッコ[]が2つあり2次元を示しており、両辺の次元数が一致しているので正しいコードです。

Eは同様に左辺の大カッコ[]の数の合計より3次元であり、右辺の次元数と一致しているので正しいコードです。

したがって、答えはCです。

 

Aは右辺で要素数の指定をしていますが、中カッコ{}を書いて初期化をしいるのでコンパイルエラーになります。

Bも初期化をしていますが、要素数の指定をしていないので正しいコードです。

Cは左辺で要素数の指定をしているのでコンパイルエラーになります。

Dは2次元配列であり、全次元の要素数を指定をしているので正しいコードです。

Eは1次元目だけ要素指定をしていますが、正しいコードです。

Fは2次元目だけ要素指定をしていますが、1次元目の要素指定をしていないのでコンパイルエラーになります。

 

したがって、答えはA、C、Fです。

 

 

Java Silver 問題集
参考記事【Java Silver問題集】高頻出・間違えやすい問題たち

この記事は、Oracle Java SE8 Silver(1Z0-808)の対策講座です。 出題確率が高く、間違いやすい例題が解説付きで100問以上あります。   Java Silver 問 ...

続きを見る

-IT転職・プログラミングスクール
-,

Copyright© 人生2段飛ばし , 2020 All Rights Reserved Powered by AFFINGER5.