Java | 配列の「要素へのアクセス」と「インデックス」

Java Java
スポンサーリンク

成績管理ミニアプリ(配列 × クラス構造)

ここでは「配列を使った入力付きのミニアプリ(成績管理システム)」を、実務風にクラス分け(Main+Service構成) で作ってみましょう。


目的

  • ユーザーが「人数」と「点数」を入力
  • 平均・最高点・最低点を表示
  • 配列を使って値を保持
  • Main(起動クラス)と GradeService(処理担当)に分割

全体構成

GradeApp/
 ├─ Main.java           ← エントリーポイント
 └─ GradeService.java   ← 成績処理クラス

Main.java(メインクラス)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        GradeService service = new GradeService(sc);

        System.out.println("=== 成績管理システム ===");
        System.out.print("学生の人数を入力してください: ");
        int n = sc.nextInt();

        int[] scores = service.inputScores(n);
        service.showResult(scores);

        sc.close();
        System.out.println("=== 終了しました ===");
    }
}
Java

ポイント解説

  • GradeService のインスタンスを作って、処理を「委譲」しています。
  • inputScores() で配列入力、showResult() で結果表示。
  • Scanner をサービスにも渡して再利用(リソースを一元管理)。

GradeService.java(業務ロジック)

import java.util.Scanner;

public class GradeService {

    private final Scanner sc;

    public GradeService(Scanner sc) {
        this.sc = sc;
    }

    // 点数入力
    public int[] inputScores(int n) {
        int[] scores = new int[n];
        for (int i = 0; i < n; i++) {
            System.out.print((i + 1) + "人目の点数を入力: ");
            scores[i] = sc.nextInt();
        }
        return scores;
    }

    // 平均・最大・最小を計算して出力
    public void showResult(int[] scores) {
        if (scores.length == 0) {
            System.out.println("データがありません。");
            return;
        }

        int sum = 0;
        int max = scores[0];
        int min = scores[0];

        for (int s : scores) {
            sum += s;
            if (s > max) max = s;
            if (s < min) min = s;
        }

        double avg = (double) sum / scores.length;

        System.out.println("\n--- 成績結果 ---");
        System.out.println("平均点: " + avg);
        System.out.println("最高点: " + max);
        System.out.println("最低点: " + min);
    }
}
Java

実行例

=== 成績管理システム ===
学生の人数を入力してください: 3
1人目の点数を入力: 85
2人目の点数を入力: 90
3人目の点数を入力: 70

--- 成績結果 ---
平均点: 81.66666666666667
最高点: 90
最低点: 70
=== 終了しました ===

実務風アレンジのポイント

ポイント内容
✅ 責務分離入出力と計算ロジックをクラス分け(保守性◎)
✅ 再利用性GradeService は他のアプリでも使い回せる
✅ 安全設計要素数0チェック・Scanner共有
✅ 拡張性将来 Student クラスを追加しやすい設計

応用練習(発展課題)

  • 点数ごとに「合格/不合格」を表示するメソッドを追加
public void showPassFail(int[] scores, int border) { ... }
Java
  • 名前と点数をペアで入力(String[] names, int[] scores
  • 平均以上の学生だけを表示する機能を追加
  • 成績データをファイルに保存する(I/O入門)

次のステップ

この構成は「Service分離設計の第一歩」です。
次に学ぶと良いテーマ:

  • 配列を ArrayList に置き換える(可変長対応)
  • Student クラスを作り、「名前+点数」のリストで管理
  • Stream API で平均・最大・最小を簡潔に処理
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました