#author("2017-07-16T18:12:31+09:00","","")
#author("2017-07-16T18:13:10+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クラスをつかってうるう年かどうかを確認するサンプルソースでした。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS