🏔️

[Java]GitHubにアップされているJavaソースコードを解析 (備忘録)

に公開

1.はじめに

Java の理解を深めるために、他のエンジニアが作成したソースコードを解析してみました。
一部ソースコードを、自分なりに修正しています。

2.解析プログラム

Game.java
import java.util.Scanner;

public class Game {
    public static void main(String[] args) {
        // 標準入力(通常はキーボード)からの入力内容を受け付ける
        Scanner scanner = new Scanner(System.in);
        int score = 0;

        String[] questions = {
            "ラザニアが大好きなオレンジ色の猫の名前は?",
            "映画「ダークナイト」で、ジョーカーを演じた俳優の名前は?",
            "映画「マッドマックス2」の影響を受けて作られた日本の漫画は?"
        };

        String[] answers = {
            "ガーフィールド",
            "ヒース・レジャー",
            "北斗の拳"
        };

        String[] hints = {
            "ヒント:オーディーという名前の犬が、オレンジ色の猫の友達。",
            "ヒント:オーストラリア出身。",
            "ヒント: 「ひでぶ」「あべし」といった断末魔の叫び。"
        };

        // 配列questionsの要素数を取得
        int numQuestions = questions.length;

        System.out.println("クイズを始めます。");
        System.out.println("問題数は" + numQuestions + "問です。");

        while (true) {
            /*
            配列の要素数と生成した乱数を掛け合わせ、
            0 以上 numQuestions 未満の範囲内の整数値を無作為に生成
            int 型にデータ型変換することで、小数点以下を切り捨て
            */
            int randomIndex = (int) (Math.random() * numQuestions);
            // 生成された値を使用し、配列から要素を取得
            String selectedQuestion = questions[randomIndex];
            String correctAnswer = answers[randomIndex];
            String hint = hints[randomIndex];

            // 質問を表示
            System.out.println("質問:" + selectedQuestion);

            // キーボードからの入力内容を1行読み取る
            String userAnswer = scanner.nextLine();
    
            // 回答内容が正しいか判定
            if (userAnswer.equals(correctAnswer)) {
                System.out.println("正解!");
                score++;
            } else {
                System.out.println("残念! ヒントは要りますか? (yes/no)");
                // キーボードからの入力内容を1行読み取り、小文字に変換
                String giveHint = scanner.nextLine().toLowerCase();
                if (giveHint.equals("yes")) {
                    System.out.println(hint);
                } if (!giveHint.equals("yes") && !giveHint.equals("no")) {
                    System.out.println("YesかNoで答えてください");
                }
            }

            System.out.println("クイズを続けますか? (yes/no)");
            // キーボードからの入力内容を1行読み取り、小文字に変換
            String playAgain = scanner.nextLine().toLowerCase();
            // yes以外の場合、while文から抜ける
            if (!playAgain.equals("yes")) {
                break;
            }
        }

        System.out.println("あなたの得点は、" + score + "点です");
        System.out.println("参加ありがとう!");
    }
}

3.参考

使用ソースコード
キーボードから入力された値を取得する
Javaのlengthとは?文字列や配列の長さを取得するlengthの使い方
Java Math.random() メソッド
JavaのScannerクラスのnextLineメソッドの使い方を現役エンジニアが解説【初心者向け】
equals/equalsIgnoreCaseメソッド

4.その他

実行環境

Discussion