プログラミングとプラモデル

プログラミングもプラモデルも初心者。でも・だから楽しい。

Java入門<1>

こんにちは。yufinです。
今日は久しぶりのプログラミングです。
いまJavaを勉強中です。
参考書はこち

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

内容は、ある会社の先輩が、新人2人にJavaを教えていく。というものです。

新人2人の疑問点は、読者の視点と一致することもよくあり、
とても分かりやすい内容となっています。

現在8章まで読みすすめたところなのですが、
場合分けについて、「あ、これいいな」って思うところがありました。

章末の練習問題は以下のような内容でした。
「聖職者は「祈る」という行動を取ることができ、自分のMPを回復できます。回復量は祈った秒数にランダムで0~2ポイントの補正を加えた量です。ただし、最大MPよりも回復することはありません。
 そこで、引数に「祈る秒数」を指定し、戻り値として「実際に回復したMPの量」を返すメソッドを作成しなさい。」

私の初めの回答は

        System.out.println(this.name+"は、祈った。");
        int add_mp=new Random().nextInt(3)+sec;
        int tmp_mp=this.mp+add_mp;
        int bef_mp=this.mp;
        if(tmp_mp>this.max_mp)
        {
            this.mp=this.max_mp;
            return this.max_mp-bef_mp;
        }else
        {
            return add_mp;
        }

でした。
MP最大値を超えたときの処理はif文を使っています。

しかし、模範解答は以下のとおりでした。

        System.out.println(this.name+"は、祈った。");
        int add_mp=new Random().nextInt(3)+sec;
        int recActual=Math.min(this.max_mp-this.mp,add_mp);
        this.mp+=recActual;
        System.out.println("MPが"+recActual+"回復した。");

とてもシンプルです。
そして、場合分けに必須な条件式がない分、バグが入り込む余地も少なくなるように感じました。
returnも1か所のみというのも良いですね。

嬉しかったので、久しぶりのプログラミングでした。