おはようございます。
昨日に引き続き暑いですね。
スーツを着ているときに半袖ハーフパンツの方を見かけるとうらやましく思います。。
さて今日は配列の宣言についての問題です。
問.次のコードのうち、コンパイルエラーになるのは何行目か。正しいものを選びなさい。(3つ選択)
public class Main{
public static void main(String[] args){
int[] array1 = { 1, 2, 3 };
int array2 = array1;
int[] array3 = new int[3];
array3 = new int[5];
int[] array4 = new int(4);
int[3] array5;
}
}
A.3行目
B.4行目
C.5行目
D.6行目
E.7行目
F.8行目
——————この先答え———————
答.B,E,F
2回Bronzeを受けましたが2回とも「何行目がコンパイルエラーになるでしょう」といった問題が出題されています。
なので復習もかねて抑えておこうと思いこの問題にしました。
1行ずつ解説していきます。
3行目は、初期化演算子を使い、配列のインスタンスの生成と要素の初期化を同時に行っているコードです。
よって、コンパイルエラーは発生しません。選択肢Aは間違いになります。
4行目は、int型の変数にint型しか扱わない配列型変数の値を代入しています。
配列型変数の中には配列インスタンスへの参照が入っています。
int型変数には参照を代入できません。よって4行目ではコンパイルエラーが発生します。
選択肢Bは正解です。
5行目は配列型変数を用意して、3つの要素を持つ配列のインスタンスの生成、
その参照を代入しているコードです。このコードではコンパイルエラーはおきません。
選択肢Cは間違いになります。
6行目は宣言済みの配列型変数に新しい配列インスタンスを生成、その参照を代入しています。
変数の参照先の配列インスタンスを変更しただけなのでコンパイルエラーは発生しません。
選択肢Dは間違いになります。
7行目は配列インスタンスの生成をするためにカッコ「( )」を使っています。
配列は角カッコ「 [ ] 」を使わなければなりません。よってこのコードはコンパイルエラーになります。
選択肢Eは正解です。
8行目は参照型変数を宣言しています。参照型変数は配列インスタンスへの
参照が入るだけで配列そのものを作ってるわけではありません。
そのため変数宣言時に要素数を指定することはできません。
よってこのコードはコンパイルエラーになります。
選択肢Fは正解です。
今回の問題は配列の問題でしたが、「コンパイルエラーになるのは何行目か」といった問題は
配列の問題以外でも出てくるので注意が必要です。
コンパイルエラーを覚える手っ取り早い方法はとにかく自分で動かしてみることだと思います。
コンパイルエラーの理由も考えながらやってみるとなお良いと思います。