このエントリーをはてなブックマークに追加


うるう年のチェックを行う

Calendarクラスを使って、引数で指定した年-2月-28日を設定し、
Calendarクラスのaddメソッドで+1日します。
一日加算したCalendarオブジェクトの月を確認し2月のままの場合はうるう年。
3月になっていれば、うるう年ではない判定を行っています。
(計算式で求める方が簡単だと思いますが…)
以下にサンプルソースおよび実行結果を記します。

うるう年確認のサンプルソース

本サンプルソースは、実行時にチェックしたい年を引数として渡す必要があります。

java IsLeap 年

のようになります。
以下にサンプルソースを記します。
fileIsLeap.java LF

import java.util.Calendar;

class IsLeap {
    public static void usage(String[] args) {
        if (args.length != 1) {
            System.err.println("usage: java isleap <Year>");
            System.exit(1);
        }
		if (!isNum(args[0])) {
            System.err.println(args[0] + " is not number.");
            System.exit(2);
        }
    }

	private static boolean isNum(String s) {
        boolean b = true;
        try {
            Integer.parseInt(s);
        } catch (NumberFormatException e) {
            b = false;
        }
        return b;
    }

    public boolean isLeap(int year) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, 1, 28);   //year/2/28 (month is zero start)
//        System.out.println("set end of Feb: " + cal.getTime().toString());
        cal.add(Calendar.DATE, +1);
//        System.out.println("add 1 day: " + cal.getTime().toString());
        if (cal.get(Calendar.MONTH)+1 == 3) {
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        usage(args);
        IsLeap me = new IsLeap();
        boolean leap = me.isLeap(Integer.valueOf(args[0]));
        if (leap) {
            System.out.println(args[0] + " is leap year.");
        } else {
            System.out.println(args[0] + " is *not* leap year.");
        }
    }
}

実行結果

以下にコンパイルおよび実行結果を記します。

  1. コンパイルします。
    $ javac IsLeap.java 
  2. 引数なしで実行すると、Usageが表示されます。
    $ java IsLeap 
    usage: java isleap <Year>
  3. 2016, 2017を引数に渡して実行した時の結果です。
    $ java IsLeap 2016
    2016 is leap year.
    $ java IsLeap 2017
    2017 is *not* leap year.
  4. 2016年から2025年までの出力です。
    $ for Y in `seq 2016 2025`
    > do
    >   java IsLeap $Y
    > done
    2016 is leap year.
    2017 is *not* leap year.
    2018 is *not* leap year.
    2019 is *not* leap year.
    2020 is leap year.
    2021 is *not* leap year.
    2022 is *not* leap year.
    2023 is *not* leap year.
    2024 is leap year.
    2025 is *not* leap year.

以上、Calendarクラスをつかってうるう年かどうかを確認するサンプルソースでした。


添付ファイル: fileIsLeap.java 358件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-16 (日) 18:13:10