萬年曆(java)

1. 計算某一天是星期幾

在這裏插入圖片描述

import java.util.Scanner;
public class Demo1{
	public static void main(String[] args){
		//要求用戶輸入一個年月日 計算出用戶輸入的年月日時星期幾
		Scanner sc=new Scanner(System.in);
		System.out.println("請輸入年份");
		int year=sc.nextInt();
		System.out.println("請輸入月份");
		int month=sc.nextInt();
		System.out.println("請輸入天數");
		int day=sc.nextInt();

		int totalDay=0;
		//1:計算經過的整年的天數(整年是從1900開始到用戶輸入的年份的前一年(例如用戶輸入的是2020 整年應該是1900--2019))
		for(int i=1900;i<year;i++){
			//計算1900 1901 1902... i是代表年份的增長也就是經過的每一年 year是固定值
			if((i%4==0 && i%100!=0) || (i%400==0)){
				totalDay+=366;
			}else{
				totalDay+=365;
			}
		}
		//2:計算經過的整月的天數(1--12)(整月是從1月開始到用戶輸入的前一個月 例如用戶輸入的是10月 整月就是1--9)
		for(int i=1;i<month;i++){
			switch(i){
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					totalDay+=31;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					totalDay+=30;
					break;
				case 2:
					if((year%4==0 && year%100!=0) || (year%400==0))
						totalDay+=29;
					else
						totalDay+=28;
					break;
			}
		}
		//3:計算經過的天數
		totalDay+=day;
		//加入輸入的年份是2020年3月 
		//totalDay沒有加1的話 日期是計算到 2020年2月29或者28

		//程序執行到這個地方 例如用戶輸入的是2020年3月 求3月1號是星期幾 整年2019年12月31號 循環加上月份 月份只加到2月最後一天
		//求3月1號 3月的1號 1這一天是不是需要加上

		//2020年1月1號這一天星期幾 只加上了2019年之前整年的天數  2019年12月31日 


		int week=totalDay%7;
		if(week==0)
			week=7;

		System.out.println(year+"年"+month+"月"+day+"日:是星期"+week);
	}
}

2. 打印月份

在這裏插入圖片描述

import java.util.Scanner;
public class Demo2{
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		System.out.println("請輸入年份:");
		int year=sc.nextInt();
		System.out.println("請輸入月份:");
		int month=sc.nextInt();

		int totalDay=0;
		//1:計算從1900年1月1號 到用戶輸入的年份的整年的天數 1900--用戶輸入的年份的前一年
		for(int i=1900;i<year;i++){
			if((i%4==0 && i%100!=0) || (i%400==0)){
				totalDay+=366;
			}else{
				totalDay+=365;
			}
		}

		//2:計算用戶輸入的年份的經過月份的天數(例如用戶輸入的是2020年10月 加上2020年1月--9月的總天數)
		for(int i=1;i<month;i++){
			switch(i){
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					totalDay+=31;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					totalDay+=30;
					break;
				case 2:
					if((year%4==0 && year%100!=0) || (year%400==0))
						totalDay+=29;
					else
						totalDay+=28;
					break;
			}
		}

		//計算用戶輸入的月份的天數(2020年10月 求10月1號這一天 前面加到2020年9月30號 因爲10月還有一天)
		// totalDay++;
		//計算用戶輸入的年份和月份的第一天是星期幾
		int week=(totalDay+1)%7;

		// ++totalDay  和  totalDay+1   totalDay是不一樣的    ++totalDay的值 比 totalDay+1 要大1

		System.out.println(week);

		System.out.println("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
		//按照現在的日曆格式 統計出來當前月的1號是星期幾 那麼前面就應該出現多少個\t
		//如果當前的1號是星期天 那麼week是0 剛好一個\t都不輸出 輸出\t的循環 i是從0開始 
		for(int i=0;i<week;i++){
			System.out.print("\t");
		}

		//問題:當前月的天數 輸出截止數 下面的循環我現在不確定用戶輸入的月份的天數(31/30/29/28)
		//計算用戶輸入的月份的天數
		int monthDay=31;
		switch(month){
				case 4:
				case 6:
				case 9:
				case 11:
					monthDay=30;
					break;
				case 2:
					monthDay=((year%4==0 && year%100!=0) || (year%400==0))?29:28;
					break;
			}

		//輸出日期(從1號開始到當前月的截止)
		for(int i=1;i<=monthDay;i++){
			//一個星期只有7天 那麼控制換行的
			System.out.print("  "+i+"\t");
			//控制換行(輸出的月份的1號是星期四那麼輸出到星期六以後要換行)  輸出的月份的1號是星期二 那麼 輸出到星期六要換行
			//控制換行的第一種方式
			//totalDay%7餘數是當前月的1號的星期四  同樣的推理 2號是星期五  3號是星期六 3
			// if((totalDay+i)%7==6){
			// 	System.out.print("\n");
			// }
			//控制換行的第二種方式
			//week 是當前月的1號的星期幾 例如week是4  2 5  3 6  (week+i)%7==0 
			if((week+i)%7==0)
				System.out.println();
		}
		System.out.println();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章