2022.11.16

Javaプログラミング

閏年(うるうどし)の判定 その2

ここでは、閏年うるうどし)の2月の最終日が29日になることを利用した判定方法を紹介します。

閏年をプログラムで判定するには、以下の順番で判定していきます。

・Calenderクラス西暦年号と2月1日を設定する。

・Calenderクラスで、設定した月の最終日を取得する

・取得した最終日が29の場合は、「閏年」とする。

・取得した最終日が29でない場合は、「平年」とする。

Javaソースコード

西暦1900~2100年の間の閏年を見つけるソースコードです。

Uruudoshi2.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
import java.util.Calendar;

public class Uruudoshi2 {
	// 閏年(うるうどし)判定メソッド
	static boolean isUruudoshi( int year )
	{
		// Calendarクラスのインスタンス生成
		Calendar calendar = Calendar.getInstance();

		// year年2月1日を設定
		calendar.set( year, Calendar.FEBRUARY, 1 );

		// 最終日を取得
		int daymax = calendar.getActualMaximum( Calendar.DAY_OF_MONTH );

		// 最終日が29日なら閏年
		if ( 29 == daymax ) return true;

		//最終日が29日でない場合は平年
		return false;
	}


	// メイン
	public static void main( String[] args ) {
		// 西暦1900年から2100年で、閏年を判定
		for ( int year = 1900; year <= 2100; year ++ ) {
			// 閏年かを判定
			if ( isUruudoshi( year ) )
				System.out.println( "西暦" + year + "年は、閏年" );
		}
	}
}

実行結果

実行

C:\talavax\javasample>java Uruudoshi2

出力結果

西暦1904年は、閏年
西暦1908年は、閏年
西暦1912年は、閏年
西暦1916年は、閏年
西暦1920年は、閏年
西暦1924年は、閏年
西暦1928年は、閏年
西暦1932年は、閏年
西暦1936年は、閏年
西暦1940年は、閏年
西暦1944年は、閏年
西暦1948年は、閏年
西暦1952年は、閏年
西暦1956年は、閏年
西暦1960年は、閏年
西暦1964年は、閏年
西暦1968年は、閏年
西暦1972年は、閏年
西暦1976年は、閏年
西暦1980年は、閏年
西暦1984年は、閏年
西暦1988年は、閏年
西暦1992年は、閏年
西暦1996年は、閏年
西暦2000年は、閏年
西暦2004年は、閏年
西暦2008年は、閏年
西暦2012年は、閏年
西暦2016年は、閏年
西暦2020年は、閏年
西暦2024年は、閏年
西暦2028年は、閏年
西暦2032年は、閏年
西暦2036年は、閏年
西暦2040年は、閏年
西暦2044年は、閏年
西暦2048年は、閏年
西暦2052年は、閏年
西暦2056年は、閏年
西暦2060年は、閏年
西暦2064年は、閏年
西暦2068年は、閏年
西暦2072年は、閏年
西暦2076年は、閏年
西暦2080年は、閏年
西暦2084年は、閏年
西暦2088年は、閏年
西暦2092年は、閏年
西暦2096年は、閏年

Javaソースコードの解説

001
import java.util.Calendar;

「java.util」パッケージにあるCalendarクラスを使うための記述です。 この記述により、Calenderクラスが利用できるようになります。

003
public class Uruudoshi2 {

クラス名を、Uruudoshi2としています。

004
005
006
	// 閏年(うるうどし)判定メソッド
	static boolean isUruudoshi( int year )
	{

閏年かを判定するisUruudoshi2メソッドです。西暦int型変数yearで渡し、「閏年」の場合true「平年」の場合falseを戻します。

007
008
		// Calendarクラスのインスタンス生成
		Calendar calendar = Calendar.getInstance();

デフォルトのロケール、タイムゾーンを持つCalendarオブジェクトcalendarを生成します。

Calendar.getInstanceメソッド

public static Calendar getInstance()
・デフォルトのタイムゾーンおよびロケールを使用してカレンダを取得

  パラメータ なし

  戻り値     デフォルトロケールを持つデフォルトタイムゾーンの現在時刻に基づいたCalendar
010
011
		// year年2月1日を設定
		calendar.set( year, Calendar.FEBRUARY, 1 );

西暦年year、2月1日をCalendarクラスのsetメソッドで設定しています。

Calendarの月を表す値

public int JANUARY
・グレゴリオ暦とユリウス暦の年の1番目の月を示すMONTHフィールドの値です。
  値     0
public int FEBRUARY
・グレゴリオ暦とユリウス暦の年の2番目の月を示すMONTHフィールドの値です。
  値     1
public int MARCH
・グレゴリオ暦とユリウス暦の年の3番目の月を示すMONTHフィールドの値です。
  値     2
public int APRIL
・グレゴリオ暦とユリウス暦の年の4番目の月を示すMONTHフィールドの値です。
  値     3
public int MAY
・グレゴリオ暦とユリウス暦の年の5番目の月を示すMONTHフィールドの値です。
  値     4
public int JUNE
・グレゴリオ暦とユリウス暦の年の6番目の月を示すMONTHフィールドの値です。
  値     5
public int JULY
・グレゴリオ暦とユリウス暦の年の7番目の月を示すMONTHフィールドの値です。
  値     6
public int AUGUST
・グレゴリオ暦とユリウス暦の年の8番目の月を示すMONTHフィールドの値です。
  値     7
public int SEPTEMBER
・グレゴリオ暦とユリウス暦の年の9番目の月を示すMONTHフィールドの値です。
  値     8
public int OCTOBER
・グレゴリオ暦とユリウス暦の年の10番目の月を示すMONTHフィールドの値です。
  値     9
public int NOVEMBER
・グレゴリオ暦とユリウス暦の年の11番目の月を示すMONTHフィールドの値です。
  値     10
public int DECEMBER
・グレゴリオ暦とユリウス暦の年の12番目の月を示すMONTHフィールドの値です。
  値     11
013
014
		// 最終日を取得
		int daymax = calendar.getActualMaximum( Calendar.DAY_OF_MONTH );

getActualMaximumメソッドで、月の最終日を取得してint型変数daymaxに代入しています。

Calendar.getActualMaximumメソッド

public int getActualMaximum( int field )
・指定のカレンダ・フィールドが取り得る最大値の取得

  パラメータ field : カレンダ・フィールド

  戻り値     指定されたカレンダ・フィールドの最大値
016
017
		// 最終日が29日なら閏年
		if ( 29 == daymax ) return true;

最終日daymaxが、29の場合は「閏年」なので、return文trueを戻しています。

019
020
		//最終日が29日でない場合は平年
		return false;

最終日daymaxが、29でない場合は「平年」なので、return文falseを戻しています。

024
025
	// メイン
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

026
027
		// 西暦1900年から2100年で、閏年を判定
		for ( int year = 1900; year <= 2100; year ++ ) {

for文で、変数yearを1900~2100年まで1ずつ増やしていくループを作成しています。

028
029
030
			// 閏年かを判定
			if ( isUruudoshi( year ) )
				System.out.println( "西暦" + year + "年は、閏年" );

変数yearをisUruudoshiメソッドに渡して判定しています。

「閏年」と判定された場合、printlnメソッドコンソール出力しています。

前のコンテンツ

西暦を与えて閏年か平年かを判定するプログラムを紹介しています。

2019.09.28

次に読んでほしいコンテンツ

割り算で割り切れずに残った端数を剰余(余り)といいます。この剰余の計算をJavaのソースコードを使って解説しています。

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

西暦を与えて閏年か平年かを判定するプログラムを紹介しています。

2019.09.28

広告