2020-08-08

Java语言程序设计基础篇原书第十版第六章日历复习题

import java.util.Scanner;

public class PrintCalendar {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	@SuppressWarnings("resource")
	Scanner input = new Scanner(System.in);
		System.out.print("Enter full year :");
		int year = input.nextInt();
		System.out.print("Enter month as a number between 1 and 12: ");
		int month = input.nextInt();
		printMonth(year,month);
}
public static void printMonth(int year, int month) {
	// TODO Auto-generated method stub
	printMonthTitle(year, month);
	printMonthBody(year, month);
}

public static void printMonthTitle(int year, int month) {
	// TODO Auto-generated method stub
	System.out.println("         "+getMonthName(month)
	+ " " + year);
	System.out.println("-----------------------");
	System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
}

public static String getMonthName(int month) {
	// TODO Auto-generated method stub
	String monthName = "";
	switch (month) {
	case 1:		monthName = "January";break;
	case 2:		monthName = "February";break;	
	case 3:		monthName = "March";break;
	case 4:		monthName = "April";break;	
	case 5:		monthName = "May";break;
	case 6:		monthName = "June";break;	
	case 7:		monthName = "July";break;
	case 8:		monthName = "August";break;	
	case 9:		monthName = "September";break;
	case 10:	monthName = "October";break;	
	case 11:	monthName = "November";break;
	case 12:	monthName = "December";
	
	}
	return monthName;
}
public static void printMonthBody(int year, int month) {
	// TODO Auto-generated method stub
	//一个月第一天
	int startDay = getStartDay(year, month);
	int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
	int i=0;
	//一个月第一天之前星期几全为“   ”(意思是上个月的天数不显示重新从这个月第一天开始显示)
	for( i = 0;i < startDay;i++) {
		System.out.print("    ");
	}
	for( i = 1;i <= numberOfDaysInMonth;i++) {
		//格式化输出十进制整型数据,“%4d”是数据长度
		System.out.printf("%4d",i);
		if((i+startDay) % 7 == 0) {
			System.out.println();
		}
	}
	System.out.println();
}
public static int getStartDay(int year,int month) {
	//这个1800年1月1日可以改成别的日期,在这只是举例子
	final int START_DAY_FOR_JAN_1_1800 = 3;
	
	int totalNumberOfDays = getTotalNumberOfDays(year, month);
	//算一个月第一天是星期几,就拿开算的日期与要算的日历月份第一日相差的总天数+开始算的日期所属的星期几 然后除以7取模
	return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;
}


	public static int getTotalNumberOfDays(int year, int month) {
		int total = 0;
		for(int i = 1800;i < year; i++)
			if(isLeapYear(i))
				total = total+366;
			else {
				total = total+365;
			}
		for(int i = 0;i < month;i++) {
			total = total + getNumberOfDaysInMonth(year, i);
		}
		return total;
	}
	
	
	public static int getNumberOfDaysInMonth(int year,int month) {
		if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
			return 31;
		}
		if(month == 4 || month == 6 || month == 9 || month == 11 ) {
			return 30;
		}
		if(month == 2) return isLeapYear(year) ? 29 : 28;
		
		return 0;
	}
	public static boolean isLeapYear(int year) {
		// TODO Auto-generated method stub
		return year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 );
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值