Tips

Java Silver 練習問題13

Java Silver 練習問題13

Java Silverに関する問題を出題していきます!

■問題1

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

public class Sample {
    public static void main(String[] args) {
        int[] array = { 10, 20, 30 };
        int arrayCopy[] = array;
        array[0] = 0;
        System.out.println(arrayCopy[0]);
    }
}
  1. 「0」と表示
  2. 「10」と表示
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

【解答 1.「0」と表示】
解説
これはなかなか難しい問題です。
配列はオブジェクト参照型で、arrayとarrayCopyは同一オブジェクトを参照しています。
そのためarray[0]を変更すると、その変更がarrayCopyにも反映されるわけです。

 

■問題2

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

public class Sample {
    public static void main(String[] args) {
        int a1[] = { 1, 2 };
        int a2[] = { 10, 20 };

        int array[][] = { a1, a2 };
        System.out.println(array[1][1]);
    }
}
  1. 「1」と表示
  2. 「2」と表示
  3. 「10」と表示
  4. 「20」と表示
  5. 1~4以外
解答はここをクリック!

【解答 4.「20」と表示】
解説
配列の中に配列が格納されている、二次元配列です。
二次元配列の場合、[][]と2つになるのが特徴です。
array[1][1] を a2[1] と変換して考えるとわかりやすいですね。

 

■問題3

選択肢1~5のうち、4行目①に当てはめると実行結果が「3」になるものはどれか。2つ選べ。

public class Sample {
    public static void main(String[] args) {
        int[][] array = { { 1, 2, 3 }, { 4, 5 } };
        int n = ①;  // ①に入るコードはどれか
        System.out.println(n);
    }
}
  1. array[0][0] + array[0][1]
  2. array[2][0] – array[1][0]
  3. array[1] + array[2]
  4. array[0].length
  5. array[1][2]
解答はここをクリック!

【解答 1と4】
解説
配列に格納されている1~5の数のインデックスは以下の通りです。

  • 1 → array[0][0]
  • 2 → array[0][1]
  • 3 → array[0][2]
  • 4 → array[1][0]
  • 5 → array[1][1]

 

■問題4

実行結果が「12345」と表示されるために①に入る適切なコードは、次のうちどれか。

public class Sample {
    public static void main(String[] args) {
        int[][] array = { { 1, 2 }, { 3, 4, 5 } };
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < ①; j++) { // ①に入るコードはどれか
                System.out.print(array[i][j]);
            }
        }
    }
}
  1. array.length
  2. array[i].length
  3. array[j].length
  4. array[i].length + array[j].length
  5. 1~4以外
解答はここをクリック!

【解答 2.array[i].length】
解説
ネストfor文を用いると多次元配列の要素が取得できます。
外のfor文が一次元、内のfor文が二次元となります。
▼外のfor文で扱う要素
array[0]→{ 1, 2 }
array[1]→{ 3, 4, 5 }
▼内のfor文で扱う要素
array[0][0]→1
array[0][1]→2
array[1][0]→3
array[1][1]→4
array[1][2]→5

すると内側のfor文では5回繰り返しが実行されなければなりません。
array[i].lengthだとiが0のとき2回。iが1のとき3回繰り返すことになるので、こちらが答えとなります。

 

■問題5

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

public class Sample {
    public static void main(String[] args) {
        int array[] = new int[1];
        array[0] = 10;

        array = new int[2];
        array[1] = 20;

        int sum = 0;
        for(int i = 0; i < array.length; i++) {
            sum += array[i];
        }
        System.out.println(sum);
    }
}
  1. 「0」と表示
  2. 「10」と表示
  3. 「20」と表示
  4. 「30」と表示
  5. コンパイルエラー
解答はここをクリック!

【解答 3.「20」と表示】
解説
arrayの参照が変更されています。
3行目で生成した配列と、6行目で生成した配列は別物です。
6行目で生成した配列は{0, 20}となっています。
array[0]は初期値なので0です。
したがって0+20で「20」が表示されます。

新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search