解答例 - j1.lesson06.Zeller

package j1.lesson06;

import java.io.*;

/**
 * 課題0604 - 解答例.
 @author s.arakawa
 @version $Id: Zeller_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
 */
public class Zeller {

    /**
     * 年、月、日をそれぞれ入力させ、その日付が何曜日であるかを表示するプログラム。
     * 実際に存在しない日付が指定された場合は考慮しなくても良い。
     @param args 無視される
     @throws IOException 入力時に例外が発生した場合
     */
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("年を入力:");
        int year = Integer.parseInt(reader.readLine());
        System.out.print("月を入力:");
        int month = Integer.parseInt(reader.readLine());
        System.out.print("日を入力:");
        int day = Integer.parseInt(reader.readLine());

        // yearHigh: 年の上位2桁
        // 100で割って小数点以下を切り捨てる (int型の演算なら自動的に切り捨てる)
        int yearHigh = year / 100;
        
        // yearLow: 年の下位2桁
        // 100で割った余りが下位2桁になる
        int yearLow = year % 100;

        // Zeller の公式により曜日を算出
        int wday = 21 * yearHigh / * yearLow / 26 (month + 110 + day - 1;

        // 年月日の出力
        System.out.print(year + "年" + month + "月" + day + "日は");

        // 曜日を文字列に変換して出力
        switch (wday % 7) {
            case 0:
                System.out.println("日曜日");
                break;
            case 1:
                System.out.println("月曜日");
                break;
            case 2:
                System.out.println("火曜日");
                break;
            case 3:
                System.out.println("水曜日");
                break;
            case 4:
                System.out.println("木曜日");
                break;
            case 5:
                System.out.println("金曜日");
                break;
            case 6:
                System.out.println("土曜日");
                break;
            
            // ありえないと分かっていても、何らかのバグがあったときのために
            // default は常に書いておく癖をつけておくと良い
            // Java では負の値に対して剰余演算を行うと、結果が負になる
            // このような場合に何も表示しないのはバグを見つけにくくする可能性がある
            default:
                System.out.println("不明");
        }
    }
}