System.out.println("Java学習中");

【Java / Spring Boot】UI/UXの視点を活かしたバックエンド開発の学習ポートフォリオ

【Java Silver対策】「switch文」と「i--(後置デクリメント)」

Adobe Fireflyで作成

🟢 はじめに

Javaの学習をしていると、必ずと言っていいほど出会うのが

「インクリメント・デクリメント演算子(++ や --)」

だと思います。

単独で使う分には簡単なのですが、これが switch 文と組み合わさると、途端にひっかけ問題に変わります。

今回は、初心者が引っかかりやすい

switch文の「後置デクリメント(i--)」

の動きを解説してみたいと思います。


🚪 魔法のダンジョンでの選択

まずは、以下のJavaコードを見てください。

勇者「MP(マジックポイント)」を使って、魔法のダンジョンの扉を開けるシーンです。

public class MagicDungeon {
    public static void main(String[] args) {
        int mp = 5; // 勇者の初期MPは「5」

        // 扉の番人にMPを見せて、進む部屋を決める
        switch (mp--) {
            case 4 -> {
                System.out.println("【MP4の部屋】へ入りました");
                mp += 2; // 宝箱でMP回復
            }
            case 3 -> {
                System.out.println("【MP3の部屋】へ入りました");
                mp *= 2; // MPが2倍に
            }
            default -> {
                System.out.println("【秘密の部屋】へ案内された…");
                --mp;    // 部屋の入場料としてMPを先払い
            }
        }
        
        System.out.println("最終的な勇者のMP: " + mp);
    }
}

パッと見たとき、

「最初のMPが5だから、1減って case 4 の部屋に入るのかな?」

と思いませんでしたか?

実は、このプログラムを実行すると 【秘密の部屋】 に案内され、最終的なMPは 3 になります。

一体、裏で何が起きているのでしょうか?


📉 ステップ解説:番人とのやり取りの裏側

このコードの最大のポイントは、switch (mp--) の部分です。

mp--「後置(こうち)デクリメント」と呼ばれ、「今の数字を先に使ってから、後で1減らす」 というルールです。

ストーリーに沿って、1歩ずつ動きを見ていきましょう。

① 扉の番人へのアピール(判定)

勇者扉の番人に対して、現在のMPである 5 を提示します。

勇者「私のMPは5です!通してください!」

② 後置デクリメントの発動(変化)

番人

「よし、5だな!該当する部屋を探そう」

と振り返ったその瞬間、後置デクリメントが発動し、勇者のMPはこっそり 4 に減らされてしまいます。

③ 部屋探し(分岐)

番人は、勇者から最初に聞いた 5 という数字をもとに部屋を探します。

しかし、用意されているのは case 4case 3 だけ。

5 の部屋はありません。

④ 秘密の部屋へ(default)

該当する部屋がなかったため、番人は勇者を default(その他の人専用)である【秘密の部屋】へ案内します。

⑤ 部屋の中での出来事

秘密の部屋に入った時点での勇者のMPは、②ですでに減らされているため 4 です。

部屋の中では --mp(前置デクリメント:先に1減らす)が待ち受けており、入場料として真っ先にMPが1引かれます

その結果、

最終的な勇者のMPは `3` となって出力される

のです。


📝 まとめ:前払いか、後払いか

引っかけ問題を解くときのコツは、この2つの違いを意識すると解きやすくなると思います。

🔹mp-- (後置デクリメント): 今の数字を見せてから、こっそり減る(後払い)

🔹--mp(前置デクリメント): 真っ先に数字が減ってから、その数字を見せる(前払い)

Java学習中の方の参考になれば幸いです🙌


【プロフィール・作品置き場】

kenichikamoi.com


🎵 Youtube(楽曲一覧)はこちら

www.youtube.com