Javaプログラミング 演習編
上から下へ、全 65 枚そのまま並べています。
発表モードで開くJavaプログラミング 演習編
目次(前半)
目次(後半)
演習の進め方
効果的に演習を進める4つのポイント。
演習問題の章別配分
全25問を章ごとに分類した内訳です。
入門編の演習
P1-01 数値型の初期化と計算
数値型の宣言・初期化・計算を行う2つのプログラムを作成しよう。
- Keisan1.java:int型 tate=10, yoko=5, menseki に長方形の面積を代入し表示
- Keisan2.java:double型 hankei=8.0 で hankei × hankei × 3.14 を表示
- 表示は System.out.println(〇〇) を使う
- 〇〇には変数や計算式を直接書ける
P1-01 解答例(Keisan1.java)
P1-02 文字列の扱い
文字列型と数値型を組み合わせるプログラムを作成しよう。
- Moji1.java:String name を任意の名前で初期化し、挨拶と一緒に表示
- 出力例:「こんにちは、山田さん。」
- Moji2.java:int gekkyu と int zangyo を初期化
- 「あなたの月額給与は〇〇」を1行で表示。〇〇は gekkyu + zangyo
- 上級編:変数は gekkyu と zangyo の2つだけで実装
P1-02 解答例(Moji2.java 上級)
P1-03 条件式の書き方
P1-04 分岐を作ってみよう(1)
年齢による入場料判定プログラムを作成しよう(クラス名: Bunki1)。
- int age を任意の値で初期化
- age < 20 が true なら「入場料は未成年割引で1000円です。」
- false なら「入場料は1500円です。」
- ageが22のとき → 「入場料は1500円です。」
- 条件分岐の両方を通るパターンで動作確認
P1-04 解答例(Bunki1.java)
P1-04 分岐を作ってみよう(2)
P1-04(1)を、文字列の連結で組み立てるバージョン(Bunki2)。
- int age, int charge=1500, String comment="入場料は" を初期化
- age < 20 のとき: comment に「未成年割引で」を追記、charge を 1000 に
- 最後に comment + charge + "円です。" を表示
- 出力例(age=19): 入場料は未成年割引で1000円です。
P1-05 料金判定プログラム
年齢入力から料金区分を判定するプログラム(クラス名: JudgeFee)。
- ユーザーは年齢を整数で入力
- 60以上 → 「シルバー割引を適用します。」 + 1500円
- 13未満 → 「子供料金を適用します。」 + 1000円
- それ以外 → 3000円
- 最後に「入場料金は〇〇円です。」を表示
P1-05 解答例(JudgeFee.java)
P1-06 奇偶判定プログラム
入力された整数の奇偶を判定するプログラム(クラス名: Kigu)。
- ユーザーは整数を入力
- 2で割った余りが0 → 「偶数」
- 余りが0でない → 「奇数」
- ヒント: 剰余演算子 % を使う
P1-07 1〜100の合計
P1-08 Just100! ゲーム
複数の整数を入力し合計が100になるか超えるまで繰り返す(クラス名: Just100)。
- sum を 0 で初期化
- while ループで「数字を入力してください:」を表示し整数を入力
- 入力値を sum に加算
- sum == 100 → 「Just 100!」を表示して終了
- sum > 100 → 「Over!」を表示して終了
P1-08 解答例(Just100.java)
制御構造の演習
P2-01 定数を使ってみよう
既存の TryGradExam クラスのハードコーディング箇所を定数に置き換えよう。
- 英語と数学の点数入力を受け、合計100点以上で進級
- ハードコーディングされている100、上限点、下限点を final 定数に
- 定数名は意味が伝わるように工夫(例: PASSING_SCORE, MAX_SCORE)
- 定数を使うことで意図が読み取りやすくなる
P2-01 改善前後の比較
P2-02 反復処理を記述しよう
3つの反復処理パターンをfor文で実装しよう。
- AddNumber: 入力した n について 1〜n の整数の合計を表示
- AddOddNumber: 1〜n の奇数だけの合計を表示(i % 2 != 0 で判定)
- AddInputNumber: 最初に n を入力、次に n 回数値を入力、合計を表示
- 出力例: 「合計は: 32」
P2-02 解答例(AddOddNumber.java)
P2-03 制御構造のネスト
奇偶判定を10回繰り返し、それぞれの個数を表示するプログラム(クラス名: CountOddEven)。
- 数値を10回入力させる(for ループで10回)
- 各値の奇偶を if で判定し、それぞれカウント
- ループ終了後、奇数と偶数の個数を表示
- 出力例: 「偶数は 4 回 / 奇数は 6 回 入力されました」
P2-04 二重ループ構造(九九)
九九の表を出力するプログラムを2つ作成しよう。
- Kuku.java: 9行9列で九九を出力
- Kuku2.java: 整列した見やすい版(桁揃え)
- ヒント: System.out.print と System.out.println を使い分け
- print は改行なし、println は改行あり
P2-04 解答例(Kuku2.java)
P2-05 多肢選択を書いてみよう
switch文と if-else の使い分け演習を2つ。
- JudgePass: 英語・国語・数学の点数を入力、1科目でも70未満で「不合格」
- GetWeekdayName: 曜日番号(1-7)を入力、日本語の曜日名を出力
- ISO 8601: 月=1, 火=2, 水=3, 木=4, 金=5, 土=6, 日=7
- 不正な入力には「入力エラー」を表示
P2-05 解答例(GetWeekdayName.java)
P2-06 複合条件(うるう年判定)
うるう年の3条件を複合条件式で実装(クラス名: JudgeLeapYear)。
- 条件①: 西暦年が4で割り切れる年はうるう年
- 条件②: 西暦年が100で割り切れる年はうるう年ではない
- 条件③: 西暦年が400で割り切れる年はうるう年
- 正しい論理式: (year%4==0 && year%100!=0) || year%400==0
P2-06 解答例(JudgeLeapYear.java)
配列の演習
P2-07 配列の操作練習
1次元配列の基本操作を2問。
- ArraySum: 整数配列(要素2個以上)を定義、全要素の合計値を表示
- ArrayReverse: 10個の文字列を入力し配列に格納、逆順で表示
- scan.next() で文字列を入力する(nextInt() ではない)
- ループを2つ使う:入力用と出力用
P2-07 解答例(ArrayReverse.java)
P2-08 2次元配列の操作練習
九九の値を2次元配列に格納するプログラム(クラス名: KukuArray)。
- int[][] kuku = new int[9][9]; で2次元配列を確保
- 二重 for ループで kuku[i][j] = (i+1) * (j+1) を代入
- 格納するだけでは画面に何も表示されない
- 検証用に表示コードを別途書いてみる
P2-08 解答例(KukuArray.java)
メソッドの演習
P3-01 引数と戻り値の練習
4つのメソッドを実装してみよう。
- hello: 引数なし、戻り値なし。「Hello!」を出力
- greet: String を受けて、その文字列を出力
- luckyNumber: 引数なし、1〜10のランダム整数を返す
- calcSquare: int を受けて、その2乗を返す
P3-01 解答例
P3-02 メソッドの仕様変更
回転寿司の会計計算を仕様変更しよう。
- ①: 同じ色の皿を4皿以上注文すると1皿無料(CalcSushiPayment2)
- ②: ①に追加。300円以上の皿には1皿無料を適用しない(CalcSushiPayment3)
- ヒント: 皿数 - 1 を計算する条件分岐を追加
- 出力例: 「お会計金額は 1450 円です」
P3-03 メソッドの理解の確認
既存のソースコードを読み解く演習。
- S3-01 のコードのウォークスルーを行う
- プログラム実行から終了までの処理順序を説明できるようになる
- 変数の値の変化を順番に追う(トレース)
- 他の人に説明することで理解が深まる
P3-03 メソッドを使ってみよう(最大公約数)
既存メソッドを呼び出して結果を表示するプログラム(クラス名: ShowGcd)。
- ShowGcd には calcGcd メソッドが既に実装されている
- 2つの数値を入力し calcGcd を呼び出して最大公約数を表示
- 入力例: 912 と 642 → 結果: 6
- calcGcd の中身は理解しなくてOK。使い方の練習
P3-04 メソッドを作ってみよう(台形)
台形の面積を計算するメソッドを実装(クラス名: ShowTrapezoidArea)。
- ユーザーは上底・下底・高さを double で入力
- calcTrapezoidArea(double, double, double) を新規実装
- 台形の面積 = (上底 + 下底) × 高さ ÷ 2
- double を入力するには scan.nextDouble() を使う
P3-04 解答例(ShowTrapezoidArea.java)
P3-05 プログラムの引数のチェック
main の引数(コマンドライン引数)の数をチェックするコードに改修しよう。
- プログラムは「名前」「年齢」「職業」の3つを引数として受け取る
- 引数が3つ未満 → エラー終了
- 引数が4つ以上 → 4つ目以降は無視(同様にエラー終了で良い)
- エラー時のメッセージ: 「引数は3つ(名前、年齢、職業)です。」
- ヒント: args.length で個数取得、return; で main を終了
P3-05 解答例
P3-06 オーバーロードの実装
calcArea メソッドのオーバーロードを2つ追加しよう。
- 既存: calcArea(int width, int height) → 長方形
- 追加①: calcArea(int side) → 正方形
- 追加②: calcArea(int top, int bottom, int height) → 台形
- 期待出力: 「幅 10 高さ 8 の長方形の面積は 80」「一辺 9 の正方形の面積は 81」「上底 7 下底 10 高さ 5 の台形の面積は 42」
P3-06 解答例(PrcOverload.java)
データ型変換の演習
P3-07 式と値
既存メソッド(add, sub, mul)を組み合わせて、四則演算と同じ優先順位で計算しよう。
- 割り算メソッドは用意されていない(Javaの / 演算子を使う)
- 各穴埋めは1行で記述する
- 計算の途中で値を保持する変数は使わない
- 期待出力: 1+2=3, 1+2-3=0, 1×2+3=5, 1+2×3=7, 4×3-5÷2=10
P3-07 解答イメージ
P3-08 型変換を練習しよう
既存プログラムの型変換に関する2つの問題を修正しよう。
- 課題①: テストの平均点を整数ではなく小数まで含めて表示
- 課題②: 所得税総額の計算結果が正しくない(int の範囲を超えている)
- ①ヒント: scoreSum / scores.length を double にキャスト
- ②ヒント: workers と incomeTaxPerWorker のどちらかを long 型に変更
P3-08 解答例
P3-09 整数型への型変換
プログラム引数を整数に変換するプログラム(クラス名: DayCountFor30)。
- 引数は2個(名前、年齢)
- 引数の数が2でなければエラー終了
- args[1] を Integer.parseInt で int に変換
- age < 30 なら「nameさんの30歳までの日数は多くても dayRemain日です。」
- それ以外は「nameさんは既に30歳です」
- dayRemain = (30 - age) × 365
デバッグと例外処理の演習
プログラムのトレース演習
Eclipse のデバッグ機能でプログラムの動きを追跡しよう。
- ShowGcd クラスを動作させ、calcGcd メソッド内でステップ実行
- 入力: 320 と 115 で実行
- ループ回数ごとに a, b, rem の値を記録(トレース表)
- 変数ビューで値の変化を観察
トレース表のサンプル
calcGcd メソッドのループでの値変化(入力: 320, 115)。
例外処理のトレース演習
TryExceptionHandling クラスで例外発生時の挙動を確認しよう。
- 正常系(10/2など)で実行 → catchブロックは実行されない
- 0除算で実行 → catchブロックに入る、Exception e に詳細が格納
- 数値以外("abc")を入力 → 別の例外(InputMismatchException)
- 変数ビューで Exception e の中身を確認
例外発生パターンの観察
参考編 P4-01 文字型を扱ってみよう
char型を使った文字列操作の演習(参考編)。
- WidePrint: "HELLO!" を1文字おきにスペース挟んで表示 → 「H E L L O !」
- WidePrint2: 上記をユーザー入力した文字列で実現
- ヒント: str.length() で文字列の長さ、str.charAt(i) で1文字取得
- ReverseString: "NOW I WON !" を char配列に格納し、逆順表示
P4-01 解答例(WidePrint.java)
演習総まとめクイズ
演習総まとめクイズ 解答
手を動かして書いたコードは、読んで覚えたコードの10倍身につく。詰まった所こそ最大の学習ポイント。