コース一覧
    Java入門:条件分岐
    うるう年を判定する

    Java入門:条件分岐

    条件分岐の書き方を学び、入力や条件に応じて処理を選べるプログラムを作れるようにします。

    1
    条件分岐
    01. if 文の基本5分
    02. if-else 文5分
    03. else if で複数分岐5分
    04. 成績判定プログラム12分
    05. うるう年を判定する5分
    06. switch 文5分
    07. 三項演算子5分
    08. じゃんけんの勝敗判定15分
    09. FizzBuzz の判定部分5分
    10. 第 3 章 まとめクイズ5分

    うるう年を判定する

    うるう年の決め方は「ただし」が 2 回続きます。4 で割り切れる年はうるう年。ただし 100 で割り切れる年は違う。ただし 400 で割り切れる年はやはりうるう年。この 3 段を頭から順に書き下そうとすると、たいてい 2100 年で間違えます。

    道具を 1 つずつ確かめてから、ルールの噛み合い方を見ていきます。

    割り切れるかどうかは % で聞く

    % は割り算の余りを返す演算子です。余りが 0 なら、ちょうど割り切れたということになります。

    Java

    12 % 5   // 2   割り切れない
    20 % 4   // 0   割り切れる
    7 % 2    // 1   奇数

    つまり「x が偶数か」は x % 2 == 0、「偶数ではないか」は x % 2 != 0 と書けます。!= は「等しくない」を聞く比較演算子で、真偽を反転させる ! とは別の記号です。!x % 2 == 0 のように混ぜると、int を真偽値として扱えないと言われて弾かれます。

    3 つのルールが、年ごとにどう効くか

    3 つの問いに対する答えを年ごとに並べると、どこで結果が分かれるのかが見えます。

    年4 で割れる100 で割れる400 で割れるうるう年
    2024はいいいえいいえはい
    2023いいえいいえいいえいいえ
    2100はいはいいいえいいえ
    2000はいはいはいはい
    1900はいはいいいえいいえ

    2100 と 2000 を見比べてください。左から 2 列目までは同じで、違うのは 400 の列だけです。ここが正しく効いていれば、残りの年は自然に決まります。逆に、この 2 つが同じ答えになっているなら、3 つ目のルールがどこにも書けていません。

    && と || を混ぜたら、カッコを付ける

    && は || より先に評価されます。書いた本人が思っている区切りとずれても、コンパイルは通ってしまいます。

    Java

    boolean a1 = x || y && z;     // x || (y && z) と読まれる
    boolean a2 = (x || y) && z;   // 意味が違う

    && は左右の両方が true のときだけ true、|| はどちらか一方でも true なら true です。この 2 つを 1 つの式に混ぜるときは、意図した区切りをカッコで書き切ってください。読み手のためというより、半年後の自分のためです。

    解説

    == を = と打つのも定番の失敗です。year % 4 = 0 は「代入しようとしている」と解釈されて止まります。比較はイコール 2 個です。

    やってみよう

    isLeapYear(int year) を完成させて boolean を返してください。

    1. 3 つの問いを、それぞれ % と == != で 1 つの式として書き下す
    2. 上の表を見ながら、どの組み合わせのときに true になるかを決める
    3. && と || でつなぎ、区切りをカッコで示す
    4. 実行して 2024 / 2023 / 2100 / 2000 / 1900 の 5 件を通す

    if を並べて書いても構いません。その場合も、上から順に評価されて最初に当たった枝で確定するので、当てはまる年が少ないルールから先に置きます。書き終えたら 2100 と 2000 を頭の中でたどって、答えが分かれることを確かめてから実行してください。

    要件

    1. クラス名は Solution、メソッド名は isLeapYear にすること
    2. 引数は int year の 1 つ、戻り値の型は boolean
    3. 4 で割り切れる、100 で割り切れない、400 で割り切れる、の 3 つのルールを正しく組み合わせて判定すること

    ヒント

    `%` は割り算の余りを求める演算子です。`year % 4 == 0` で「`4` で割り切れる」を判定できます

    `&&` と `||` の両方を使います。`||` よりも `&&` のほうが優先順位が高いので、わかりやすさのために `(year % 4 == 0 && year % 100 != 0)` のようにカッコでまとめましょう

    `return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;` の 1 行で書けますが、最初は `if`-`else if`-`else` で書いて動かしてから 1 行版に直すのがおすすめです

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • switch 文

      値による多分岐を簡潔に書く switch 文を学び、case と break、default の使い方をマスターしよう。

    • 三項演算子

      Java の三項演算子 `条件 ? 真の値 : 偽の値` を使って、if-else を 1 行で書けるようになろう。

    • じゃんけんの勝敗判定

      複数の `if` を組み合わせて、3 すくみの勝敗を判定するロジックを書こう。

    • FizzBuzz の判定部分

      プログラマー面接の定番問題 FizzBuzz の中核となる判定ロジックを、if-else if-else と剰余演算で組み立てよう。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 演算子//は切り捨て除算(7 // 2 = 3)。
    • 比較演算子=は代入、==は値の比較。
    • 評価出力品質を数値化して継続改善する活動
    • コンパイルソースをバイトコードへ変換する処理
    • クラスデータと振る舞いを束ねる単位
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    main.java
    エディタを読み込んでいます

    メモ

    うるう年を判定する

    ⌘S で保存