java_万年历 (纯循环,未加方法),易理解版

12 篇文章 0 订阅
9 篇文章 0 订阅
package com.whsxt.oneyear;

import java.util.Scanner;

/**
 * 
 * @author admin
 *万年历:
 *从1900年1月1日正好是星期一, 假设输入的是:1901年3月,1901年3月1日前面
 *有几个空格([1900, 1901)的总天数  + [1901年1月, 1901年3月)的总天数 + 1) % 7:
 *实现步骤:
 * 	 1)通过Scanner获取年(year)和月(month)
 * 	 2)获取[1900, year)的总天数 + [year年1月, year年month月)的总天数
 * 		从而获取到year年month月的1号前面有几个空格
 *   3)获取year年month月的总天数
 *   4)实现year年month月的日历布局 
 */
public class Calendar {
	public static void main(String[] args) {
		//  1)通过Scanner获取年(year)和月(month)
		Scanner input = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = input.nextInt();
		System.out.println("请输入月份:");
		int month = input.nextInt();
		// 保存润年还是平年的天数
		int yearDays = 0;
		// 判断年份合法性
		if(year < 1900 )
		{
			System.out.println("年份太早了,暂时查不出来,程序员正在加班改bug中");
		}
		else {
			// 年份合法,进入循环
				for (int i = 1900; i < year; i++) {
					// 判断闰年还是平年
					if((i % 4 ==0 && i % 100 != 0) || i % 400 == 0)
					{
						// 是闰年
						yearDays += 366;
					}
					else {
						// 是平年
						yearDays += 365;
					}
				}
				// 获取year年1月到 year年month的总天数
				// 用来接收总月数天数
				
				// 2.2获取[year年1月, year年month月)的总天数
				int monthDays = 0; // 用于保存月的总天数
				for(int i = 1; i < month; i++) {
					switch(i) {
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:
						case 12:
							monthDays += 31;
							break;
						case 4:
							case 6:
							case 9:
							case 11:	
							monthDays += 30;
							break;
						case 2:
							// 需要判断year年的2月是多少天。
							if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 闰年
								monthDays += 29;
							}
							else { // 平年
								monthDays += 28;
							}
							break;
						default:
							System.out.println("您输入的月份有误,请重新输入");
					}
				}
				// 获取year年month月份总天数
				int monthDay = 0; // 用于保存月的总天	
					switch(month) {
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:
						case 12:
							monthDay = 31;
							break;
						case 4:
							case 6:
							case 9:
							case 11:	
							monthDay = 30;
							break;
						case 2:
							// 需要判断year年的2月是多少天。
							if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 闰年
								monthDay = 29;
							}
							else { // 平年
								monthDay = 28;
							}
							break;
						default:
							System.out.println("您输入的月份有误,请重新输入");
					}
				
				
				// 4.实现日历的布局
				// 4.1获取总天数
				int allDays = yearDays + monthDays;
				// 4.2获取year年month的1号前面有多少个空格
				int temp = (allDays + 1) % 7;
				// 4.3输出星期几
				System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
				// 4.4先展示空格数
				for(int i = 0; i < temp; i++) {
					System.out.print("\t");
				}
				// 4.5后展示当前月的天数
				for(int i = 1; i <= monthDay; i++) {
					System.out.print(i + "\t");
					// 当空格+i的个数为7de倍数时,执行换行操作
					if((temp + i) % 7 == 0) {
						System.out.println();
					}
				}
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值