AP Computer Science A: 実際に重要なこと
AP CS A 試験の実践ガイド — 何がテストされるのか、どこでポイントを失うのか、そして残り時間をどこに集中させるべきか。
AP Computer Science A 試験は、プログラミングを抽象的に理解している学生よりも、Java の特性を冷徹に知っている学生に報酬を与えます。2 つのセクション、各 90 分: スコアの 50% を占める 40 問の多肢選択問題と、残り 50% を占める 4 つの自由記述問題です。ほとんどの学生は自由記述セクションでポイントを失いますが、それはコンセプトを理解していないからではなく、時間的プレッシャーの下で Java の構文を誤って扱うからです。
4 つの自由記述問題はランダムではない
College Board は FRQ の構造を何年間も一貫した状態に保っています。問題 1 はほぼ常に単一クラス上のメソッドと制御構造です。問題 2 はインターフェースを実装するか別のクラスを拡張するクラスに関係します。問題 3 は 2D 配列操作です。問題 4 は ArrayList またはその他のコレクションクラスをカバーします。これを事前に知っていることは、汎用的な「AP CS 練習問題」をやるのではなく、各問題タイプを具体的に練習できるということです。
特に問題 3 については、2D 配列を行優先と列優先の両方で走査するネストされたループパターンを暗記してください:
for (int row = 0; row < arr.length; row++) {
for (int col = 0; col < arr[row].length; col++) {
// process arr[row][col]
}
}
採点者 (「Reader」と呼ばれます) はルーブリックを使用し、最終的な答えが間違っていても、正しいロジックの特定の行に対して部分的なクレジットを与えます。オブジェクトを返すメソッドで詰まっている場合、プレースホルダーとして return null; を書くのは、それを空白のままにするよりも価値があります。
毎年現れる多肢選択のトラップ
String 比較における == 対 .equals() に関する問題はほぼ毎回の試験で現れます。== はオブジェクトの参照を比較し、.equals() はコンテンツを比較します。これは学生を惑わせます。Java の文字列リテラルプールは、参照的には論理的に同じであるべきではない文字列に対して == が true を返すことがあり、これは試験がテストするのが好きなこのようなトラップです。
演算子の優先度と整数除算が他の繰り返されるトラップです。7 / 2 は 3.5 ではなく 3 と評価されます。これは両方のオペランドが int だからです。小数の結果を得るには、(double) 7 / 2 のようにオペランドの 1 つを double にキャストしてください。また、明示的なキャストなしで式で int と double を混ぜるときに何が起こるかについても質問があります — Java は混合算術で自動的に昇格することを知りますが、double の結果を int 変数に割り当てるときは切り詰めます。
継承とポリモーフィズムは見た目以上に重要性を持つ
Big Idea 4 (Class と Object Oriented Programming) は、継承専用の問題だけでなく、両方のセクション全体に現れます。オーバーライドとオーバーロードの違いを理解し、Java が宣言された参照タイプではなく実際のオブジェクトタイプに基づいてランタイムでオーバーライドされたメソッドを解決することを知ってください:
Animal a = new Dog();
a.makeSound(); // calls Dog's version, not Animal's
こはランタイムポリモーフィズムであり、試験はあなたに 1 つのタイプの参照を持つサブクラスのオブジェクトを指す参照を与え、実際にどのメソッドが実行されるかを尋ねることでこれをテストします。静的メソッドと インスタンス変数はこのルールに従いません — これらは宣言されたタイプに基づいて解決され、その区別は試験のトラップの定番です。
配列と ArrayList メカニクス: 検索ではなく自動化する必要があります
試験中は Java ドキュメントにアクセスできません。これらを躊躇なく暗記してください:
array.length(括弧なし、フィールドです)list.size()(括弧あり、メソッドです)list.add(index, element)はすべてを右にシフトしますlist.remove(index)はすべてを左にシフトし、削除された要素を返します- for-each ループで前方に反復処理しながら ArrayList から要素を削除すると
ConcurrentModificationExceptionがスローされます。代わりに、削除するときはインデックス付きループで後方に反復処理してください
この最後のポイントは、FRQ 回答の最も一般的なロジック バグの 1 つであり、Reader はこれを常に見ています。
最後の 2 週間をどう過ごすか
実際の時間制限のある条件下で過去の FRQ 全体をやってください — College Board は、ポイントがどのように与えられたかを正確に示すスコアリングガイドライン付きの実際の過去の試験を発行しています。スコアリングガイドを注意深く読んでください。これらは部分的なクレジットが実際にどの程度に細かいかを明かします。時には単一の正しく宣言された変数まで。多肢選択問題については、再帰トレーシングと 2D 配列インデックスに復習時間を集中してください。これらは、基になるコンセプトが実際にどれほど単純であるかに比べて、単純な誤りが最もポイントをコストするのはここだからです。
これすべての下の Java の基礎をより堅牢に構築したい場合、または段階的に説明されたクラス、継承、配列操作の実例を見たい場合は、Korra Studio のライブラリの Python および Computer Science セクションをチェックして、より構造化された練習を見てください。
この記事は AI の支援を受けて執筆し、Korra Studio の Michal Pilch(CISSP)が確認のうえ公開しました。
これは Korra Studio ナレッジベースの 1 つのノートです。プラットフォームはすべてのトピックと 1 対 1 メンタリングをペアで提供します。
無料で始めるarrow_forward