Java | 論理演算子を使った「採点付きミニ演習プログラム」

APP Java
スポンサーリンク

では、前回の「論理演算子を使った採点プログラム」を、Java の Swing(GUI)版 に進化させましょう。
このバージョンでは、ユーザーがウィンドウ上で点数を入力し、「判定する」ボタンを押すと結果が画面に表示されます。


仕様(完成イメージ)

  • 3教科(数学・英語・理科)の点数を入力するテキストフィールド
  • 「判定する」ボタン
  • 判定結果(特待生/合格/不合格)と平均点をラベル表示
  • アイコンや絵文字でわかりやすく
  • 論理演算子 &&, ||, ! を全て使用

💻 完成コード(コメント付き)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LogicQuizGUI extends JFrame {
    private JTextField mathField, englishField, scienceField;
    private JLabel resultLabel, avgLabel, detailLabel;

    public LogicQuizGUI() {
        setTitle("成績判定プログラム(論理演算子編)");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 350);
        setLocationRelativeTo(null); // 画面中央に表示
        setLayout(new GridLayout(7, 2, 10, 5));

        // ラベルと入力フィールド
        add(new JLabel("数学の点数:"));
        mathField = new JTextField();
        add(mathField);

        add(new JLabel("英語の点数:"));
        englishField = new JTextField();
        add(englishField);

        add(new JLabel("理科の点数:"));
        scienceField = new JTextField();
        add(scienceField);

        // 判定ボタン
        JButton judgeButton = new JButton("判定する");
        add(judgeButton);

        // 結果ラベル
        resultLabel = new JLabel("結果:", SwingConstants.CENTER);
        avgLabel = new JLabel("平均点:", SwingConstants.CENTER);
        detailLabel = new JLabel("", SwingConstants.CENTER);

        // 結果エリアを少し大きく見せる
        resultLabel.setFont(new Font("Yu Gothic UI", Font.BOLD, 16));
        avgLabel.setFont(new Font("Yu Gothic UI", Font.PLAIN, 14));
        detailLabel.setFont(new Font("Yu Gothic UI", Font.ITALIC, 13));

        add(resultLabel);
        add(avgLabel);
        add(detailLabel);

        // ボタンクリック時の処理
        judgeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    int math = Integer.parseInt(mathField.getText());
                    int english = Integer.parseInt(englishField.getText());
                    int science = Integer.parseInt(scienceField.getText());

                    // 判定ロジック
                    if (math >= 80 && english >= 80 && science >= 80) {
                        resultLabel.setText("🌟 特待生です!すばらしい成績!");
                        resultLabel.setForeground(new Color(255, 165, 0)); // オレンジ
                    }
                    else if ((math >= 60 && english >= 60) ||
                             (math >= 60 && science >= 60) ||
                             (english >= 60 && science >= 60)) {
                        resultLabel.setText("✅ 合格です!よくがんばりました!");
                        resultLabel.setForeground(new Color(0, 128, 0)); // 緑
                    }
                    else {
                        resultLabel.setText("❌ 不合格です。再挑戦しましょう。");
                        resultLabel.setForeground(Color.RED);
                    }

                    // 論理否定(!)を使った追加情報
                    boolean failed = !(math >= 60 || english >= 60 || science >= 60);
                    if (failed) {
                        detailLabel.setText("※ 全科目60点未満 → 再試験対象です。");
                    } else {
                        detailLabel.setText("");
                    }

                    int avg = (math + english + science) / 3;
                    avgLabel.setText("平均点:" + avg + " 点");

                } catch (NumberFormatException ex) {
                    JOptionPane.showMessageDialog(
                        LogicQuizGUI.this,
                        "⚠️ 数値を正しく入力してください!",
                        "入力エラー",
                        JOptionPane.ERROR_MESSAGE
                    );
                }
            }
        });

        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new LogicQuizGUI());
    }
}
Java

ポイント解説

要素説明
JFrameメインウィンドウ(アプリの外枠)
JTextFieldユーザー入力欄
JButton「判定する」ボタン
JLabel結果を表示するテキスト
ActionListenerボタンが押されたときの処理
GridLayout(7, 2, 10, 5)表形式のレイアウト(行・列・間隔)
try-catch入力が数字でない場合のエラーハンドリング
Colorラベルの色変更(見やすく楽しく)

実行イメージ

 数学の点数: [85]
 英語の点数: [78]
 理科の点数: [92]
 [判定する]
 結果:✅ 合格です!よくがんばりました!
 平均点:85 点

不合格なら赤文字で ❌、特待生ならオレンジ色で 🌟 表示されます。


発展アイデア

  1. 3教科以外(国語・社会)を追加して総合判定にする。
  2. プログレスバー(JProgressBar)で平均点を可視化。
  3. 成績履歴を保存(ファイル出力)機能を追加。
  4. 判定後に「もう一度やる」ボタンを付けてリセット。
タイトルとURLをコピーしました