目標:第67回・第63回 Java 3級 過去問を時間を計って解きます
| 問 | 出題内容 | この授業での対応単元 |
|---|---|---|
| 問1 | Javaの特徴・基本知識(正誤判定 6問) | 01・02・03 |
| 問2 | オブジェクト指向の概念(空欄補充 10問) | 09・10 |
| 問3 | データ型・演算・型変換(プログラム実行結果 5問) | 03・04 |
| 問4 | 制御文・配列・メソッド(プログラム実行結果/空欄補充 6問) | 05・06・07・08 |
| 問5 | プログラム読解・空欄補充(長文 5問) | 全単元 |
| 問6 | 複数クラス・クラスライブラリを使ったプログラム(長文 5問) | 全単元・11 |
以下を見ずに言えるか確認しましょう。答えられないものを重点的に復習してください。
| 記述 | 正誤 | 理由 |
|---|---|---|
| JREはJavaプログラムの実行に必要なソフトウェアである | ✅ 正しい | |
| ソースファイルの拡張子は .jv にする | ❌ 誤り | 正しくは .java |
| 最初に呼び出されるメソッドは start メソッドである | ❌ 誤り | 正しくは main |
| コメントは // の1種類しかない | ❌ 誤り | // /* */ /** */ の3種類 |
| あるJVMで動くプログラムは別のJVMでも動く | ✅ 正しい | WORA |
| Javaのプログラム内部の文字コードはUnicodeである | ✅ 正しい | |
| Javaの基本データ型は整数・浮動小数点・文字・論理型である | ✅ 正しい | String は基本型ではない |
| ソースファイルをコンパイルしてバイトコードを生成しJVMで実行する | ✅ 正しい |
| 用語 | 意味 |
|---|---|
| メンバ変数(フィールド) | クラスが持つデータ |
| メソッド | クラスが持つ処理 |
| インスタンス | クラスから new で作った実体 |
| メッセージ | インスタンスへのメソッド呼び出し |
| カプセル化 | データを隠蔽してメソッド経由でのみ操作させること |
| 継承(インヘリタンス) | 既存クラスを引き継いで新クラスを作ること |
| スーパークラス | 継承元(親)のクラス |
| サブクラス | 継承先(子)のクラス |
| 多態性(ポリモーフィズム) | 同じ操作でもインスタンスの種類によって動作が変わること |
各問題を自分で解いてから答えを確認しましょう。
int a = 6; System.out.println(-a - 2);
単項の -a が先に評価されて -6。その後 -6 - 2 = -8。
int x = 35; short y = x + 10000; System.out.println(y);
x + 10000 の結果は int 型。short への代入にはキャストが必要。
int a = 3 / 8; double b = 3 / 8.0; System.out.println(a + " " + b);
3/8 は整数除算で 0。3/8.0 は double 計算で 0.375。
int[] data = {3, 5, 6, 9, 10, 13, 16};
for (int i = 0; i < data.length; i += 2) {
System.out.print(data[i] + ", ");
}
i = 0, 2, 4, 6 → data[0]=3, data[2]=6, data[4]=10, data[6]=16
int a = 4;
switch (a - a / 2 * 2) {
case 0:
System.out.println("zero");
case 1:
System.out.println("one");
}
a - a/2*2 = 4 - 2*2 = 0 → case 0 に入る。break なしでフォールスルーして case 1 も実行。
int a = 5;
while (a > 0) {
System.out.println(--a);
a--;
}
1ループで a が2減ります。前置 --a で表示前に減算。
int t = (int)4.99999; System.out.print(t);
double → int のキャストは小数点以下を切り捨て。四捨五入ではありません。
String mozi = "";
for (int i = 0; i < 3; i++) {
mozi = mozi + "@";
}
System.out.print(mozi);
空文字に "@" を3回連結。
問5・問6は長文ですが、解き方には流れがあります。
| ステップ | やること |
|---|---|
| ① | プログラムの説明(日本語)を読んで「何をするプログラムか」を把握します |
| ② | クラス構成とメソッドの一覧表を確認します |
| ③ | 実行結果例を先に見て、期待する動作を理解します |
| ④ | 空欄の前後のコードを読んで、何が入るかを推測します |
| ⑤ | 選択肢を代入して論理的に正しいかを確認します |
「100mのタイムが速い順に5人格納。新しい走者の順位を求める」プログラム。
int rank = [ (30) ]; の空欄を選べ。
選択肢:ア -1 イ 0 ウ 1 エ 5
答え:ウ 1
新しい走者は最初「1位」と仮定して、比較しながら順位を下げていく設計。rank の初期値は 1。
バスの運賃計算プログラム。存在しないバス停名が入力された場合にエラーを表示する。
if ( [ (35) ] ) { System.out.println("Error"); return; }
選択肢:ア f == -1 && t == -1 イ f == -1 || t == -1 ウ f >= 0 && t >= 0 エ f >= 0 || t >= 0
答え:イ f == -1 || t == -1
indexOf が -1 を返す = 存在しないバス停。乗車か降車のどちらか一方でも -1 ならエラー → ||(OR)を使います。
手元にある第67回・第63回の問題冊子を使って、実際の試験形式で解きましょう。
| 問 | 目安時間 | ポイント |
|---|---|---|
| 問1・問2 | 各 5〜7分 | 知識問題。迷ったら先に進む |
| 問3・問4 | 各 8〜10分 | トレース。紙に書いて追う |
| 問5・問6 | 各 10〜12分 | 長文。説明文と実行例を先に読む |
| 確認項目 | チェック |
|---|---|
| 問1・問2 の間違えた問題の用語を言えるか | |
| 問3・問4 のトレースで間違えた箇所はどこか(前置後置・フォールスルー・型変換) | |
| 問5・問6 で空欄の前後をどこまで読んだか | |
| 時間は足りたか(足りなければどの問で時間を使いすぎたか) |
| 間違えやすいパターン | 復習する単元 |
|---|---|
| 前置・後置インクリメントの違い | 04_演算子 |
| switch のフォールスルー | 05_制御文 |
| int/int の整数除算 | 03_データ型 |
| short や float へのキャストエラー | 03_データ型 |
| indexOf の -1 判定 | 11_クラスライブラリ |
| OOP用語(カプセル化・継承・メッセージ) | 10_OOP基礎 |
| コマンドライン引数と parseDouble | 11_クラスライブラリ・00_環境整備 |