オブジェクト指向言語・期末テスト解答用紙(2024 年 08 月 01 日)解答例

学籍番号         氏名            

  1. (3 × 2)

    (1) (A), (D) (2) (B), (E)

  2. (3 × 4)

    (1)p1.intersects(p2.getBounds2D())
    (2)(int)(Math.random() * (width - xMax))
    (4)shape.translate(x, y);
    (5)p.contains(0.5 * width, 0.5 * height)

  3. (1, 1, 1, 1, 2, 3, 3)

    (1)extends JPanel implements ActionListener
    (2)extends JPanel
    (3)new NumHandler(0)
    (4)new NumHandler(1)
    (5)new OpHandler()
    (6) new OpHandler() {
    @Override
    public int calculate(int x, int y) {
    return x - y;
    }
    }
    (9) ev -> {
    current = 0; append = true; auto_e = false;
    updateDisplay();
    }
     

  4. (4 × 2)

    (1)[(1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0)]
    (2)[(3, 1), (5, 3), (7, 3), (5, 1), (7, 5), (13, 5), (11, 3), (11, 7), (17, 7), (13, 3)]

  5. (4 × 2)

    (1) (C) (2) (B), (E)

  6. (3, 9)

    (1)2 行目の public を private に変える
    (2) 緋鯉 ツバス オボコ
    緋鯉 ハマチ オボコ
    緋鯉 ハマチ オボコ
    緋龍 ブリ ボラ
     
     

  7. (4 × 3)

    (1)extends JPanel implements Runnable, KeyListener
    (2)thread == thisThread
    (3)thread = null;

コメント

全体的に、昨年度よりも難化しているが、 S, A, B, C, X の分布を見る限り、本年度のほうが望ましい難易度だった。

  1. (1) はほとんどの人ができていたが、(2) は D を選んでしまう人が多かった。 もし null へのアクセスをコンパイル時に検出できれば、どれほど多くの人が助かることか…

  2. 中間テストのときにも同じようなコメントをしたが、ここを間違えるようでは、Java を勉強する甲斐がない。

  3. (1), (2) はほとんどの人ができていたが、(3) 〜 (5) を間違える人が意外に多い。new をつけ忘れるという間違いも多かった。(6) は正解率が低かった。(9) は最後の updateDisplay(); が抜けている解答が多かった。

  4. (2) の途中から計算をミスっている人はときどきいるが、正答率は高かった。

  5. (1) は、正答率はまあまあだったが、C 言語を関数型言語と思っている人が意外に多い。 C 言語は代表的な命令型言語である。 (2) の正答率が特に低かった。年代を覚える必要はないが、 Fortran は最古のプログラミング言語であること、 C# が Java のp対抗として登場したこと、 Java は C の文法を参考にして、C++ の複雑さのアンチテーゼとして登場したこと、 Kotlin は、よりよい Java を目指していること、など言語間の関係を知っていれば答えられるはずである。 Python は、Java より前からあることは、最終週の授業で触れた。

  6. (1) はほとんどの人ができていたが、(2) は色々な間違いがあった。 “サカナ” という出力が含まれると思っている人の多さには驚きである。 何か、大きな勘違いをしている。 また、解答が 4 行にならなかった人は、 (C 言語と共通の)制御構造を復習する必要がある。

  7. (1) は RunnableKeyListener のどちらかしか書いていない人が多かった。 (2) は thread = thisThread という 1 年生みたいな間違いがときどきあった。