成績管理ミニアプリ(配列 × クラス構造)
ここでは「配列を使った入力付きのミニアプリ(成績管理システム)」を、実務風にクラス分け(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で平均・最大・最小を簡潔に処理
