Thinkers'Studio
JavaとC言語の自習ツール
西暦年を和暦に変換するプログラムの自作例

 メソッドの戻り値として、String型を返すサンプルです。
 西暦年を引数に渡すと、"平成○年" などの和暦の文字列を返すメソッドをつくります。
 Java SE6 では、和暦を取り扱うクラスが用意されていますが、下記では簡単に実現できる自前処理をしています。

【 西暦年を和暦に変換するプログラム自作例 】
 明治以降を対象とします。また、日付までの厳密な対応はしていません。
 (たとえば 1989年は1月7日まで昭和ですが、ここでは平成元年とします)
class ToWareki {
    static final int MEIJI_Y  = 1868;
    static final int TAISHO_Y = 1912;
    static final int SHOWA_Y  = 1926;
    static final int HEISEI_Y = 1989;

    String ToWarekiStr( int y ) {
        String gg;

        if( y >= HEISEI_Y ) {
            gg = "平成"; y = y-HEISEI_Y+1;
        } else if( y >= SHOWA_Y ) {
            gg = "昭和"; y = y-SHOWA_Y+1;
        } else if( y >= TAISHO_Y ) {
            gg = "大正"; y = y-TAISHO_Y+1;
        } else if( y >= MEIJI_Y ) {
            gg = "明治"; y = y-MEIJI_Y+1;
        } else {
            return "(明治以前は未対応)";
        }
        if( y == 1 ) return gg + "元年";
        else         return gg + y + "年";
    }
}

class UseWareki {
    public static void main( String[] args ) {
        int years[] = { 1192, 1925, 1986, 1989, 2013 };
        ToWareki t = new ToWareki();

        for( int i = 0; i < 5; i++ ) {
            System.out.print( "西暦" + years[i] + "年 : " );
            System.out.println( t.ToWarekiStr( years[i] ) );
        }
    }
}
 実行結果
西暦1192年 : (明治以前は未対応)
西暦1925年 : 大正14年
西暦1986年 : 昭和61年
西暦1989年 : 平成元年
西暦2013年 : 平成25年

 西暦年 y を各元号の開始年と比較して、どの元号かを判定します。
 値の大きい「平成」から比較し、else if で範囲を狭めていくと、終了年のチェックが要りません。
 和暦での年は、y-その元号の開始年+1 です。y は値渡しなので、メソッド内で書き換えても元の値は変わりません。

  (今回のクイズはありません)
前回のクイズの答え: (前回の問題を見る
(1) 身長や体重の入力で、a などの文字を指定したとき NumberFormatException 例外が発生する
 Double クラスの parseDouble メソッドで、文字列に構文解析可能な double値を含まない場合に発生します。
(2) 入力処理の失敗で IOException 発生の可能性がある
 BufferedReader クラスの readLine メソッドを使っています。 入出力を行うクラスでは全般に、入出力処理の失敗や割り込みの発生で生成される例外 IOException を catch する必要があります。