1. 程式人生 > >JAVA實現萬年曆

JAVA實現萬年曆

package test;
/*
 * 輸出萬年曆
 * 設定1900.01.01為起點
	1970~1979
	1970 4 
	1971 5
	1972 0
	1973 1
	1974 2
	1975 3
	1976 5
	1977 6
	1978 0
	1979 1
 */
import java.util.Scanner;
public class PermanentCalendar {
	static boolean LeapYear(int year){ //判斷閏年
		if(year%400==0 || (year%4==0 && year%100!=0)){ //是閏年
			return true; 
		}
		
		else{
			return false;
		}
	}
	static final int N = 1900; //用N表示起始年份
	public static void main(String[] args){
		int n = 1;//1900年1月1日 是星期一
		int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用來儲存月份的天數
		int year[] = new int[1001];  //用來儲存每年1月1日是星期幾
		year[0] = n;
		for(int i=1;i<year.length;i++){
			int days = 365;
			if(LeapYear(i+N-1)){//如果它的前一年是閏年則需要加366
				days = 366;
				year[i] = (year[i-1] + days)%7;
			}
			else{
				year[i] = (year[i-1] + days)%7;
			}
		}
		/*
		for(int i=0;i<10;i++){
			System.out.println(year[i]);
		}
		*/
		int Month ,Year;
		Scanner in = new Scanner(System.in);
		System.out.println("請輸入年份在(1900~2900之間):");
		Year = in.nextInt();
		if(Year>2900 || Year<1900){
			System.out.println("輸入年份不合法,請重新輸入!");
			return;
		}
		//System.out.println(year[Year-1970]);
		System.out.println("請輸入月份(1~12之間):");
		Month = in.nextInt();
		if(Month>12 || Month<1){
			System.out.println("輸入月份不合法,請重新輸入!");
			return;
		}
		System.out.println("星期日     " +"星期一     "+"星期二    "+"星期三     "+"星期四     "+"星期五     "+"星期六   ");
		System.out.println();
		if(LeapYear(Year)){ //如果是閏年,2月改為29號
			month[2] = 29;
		}
		int day=0; //用來記錄當前月的一號是今年的第幾天
		for(int i=1;i<Month;i++){
			day = day + month[i];
		}
		
		day = (year[Year-N]+day)%7;
		for(int i=0;i<7;i++){//輸出控制
			if(day == i){
				System.out.print("  " + 1 + "   ");
				if(day == 6){
					System.out.println();
				}
				break;
			}
			else{
				System.out.print("      ");
			}
		}
		for(int i=2;i<=month[Month];i++){
			if(i<10){
				System.out.print("  " + i + "   ");
			}
			else{
				System.out.print(" " + i + "   ");
			}
			if((day+i-1)%7 == 6){
				System.out.println();
			}
		}
	}
}