#author("2017-07-16T18:12:31+09:00","","") #navi(../) * うるう年のチェックを行う [#i8b4118f] Calendarクラスを使って、引数で指定した年-2月-28日を設定し、~ Calendarクラスのaddメソッドで+1日します。~ 一日加算したCalendarオブジェクトの月を確認し2月のままの場合はうるう年。~ 3月になっていれば、うるう年ではない判定を行っています。~ (計算式で求める方が簡単だと思いますが…)~ 以下にサンプルソースおよび実行結果を記します。 #contents * うるう年確認のサンプルソース [#f66d3979] 本サンプルソースは、実行時にチェックしたい年を引数として渡す必要があります。 java IsLeap 年 のようになります。~ 以下にサンプルソースを記します。 &ref(IsLeap.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."); } } } * 実行結果 [#gec2f74d] 以下にコンパイルおよび実行結果を記します。 + コンパイルします。 $ javac IsLeap.java + 引数なしで実行すると、Usageが表示されます。 $ java IsLeap usage: java isleap <Year> + 2016, 2017を引数に渡して実行した時の結果です。 $ java IsLeap 2016 2016 is leap year. $ java IsLeap 2017 2017 is *not* leap year. + 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クラスをつかってうるう年かどうかを確認するサンプルソースでした。