The difficulty of printing a month’s calendar is to find out the number of weeks corresponding to the first day of the month. A good way to solve this problem is to find out that the first day of January of the year corresponds to Monday, so that the number of weeks on the first day of the month required = (the total number of days between the year and the year entered + the number of days lost The total number of days between January of the year and the month entered + 1)%7. Then the year I was looking for was 1900.
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
//Enter the year and month
//Calculate the total number of days between 1900 and the year entered
//Judging the average leap year
Scanner scanner=new Scanner(System.in);
System.out.println("Enter a year:");
int year=scanner.nextInt();
int yearTotalDays = 0;
for(int i=1900;i<year;i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
yearTotalDays += 366;
} else {
yearTotalDays += 365;
}
}
//Calculate the total number of days from January of the year entered to the month entered
System.out.println("Enter a month:");
int month=scanner.nextInt();
int monthTotalDays=0;
int days=0;
for(int m=1;m<=month;m++){ //The equal sign of m here is not used when calculating, but to avoid reconsidering how many days there are in the month when printing the input month below
//Determine the number of days in each month (big month, small month, February (also judge whether it is a normal year or a leap year)))
switch(m){
case 2:
//Determine whether the lost year is a leap year
if(year%4 == 0 && year%100 != 0 || year%400 == 0){
days = 29;
}else{
days = 28;
}
break;
//Small Moon
case 4:
case 6:
case 9:
case 11:
days=30;
break;
//Big moon
default:
days=31;
}
//Accumulate the total number of days in each month
if(m<month){
monthTotalDays+=days;
}
}
//Calculate the week number of the first day of the entered month
int week=(yearTotalDays+monthTotalDays+1)%7;
//Because the value of Sunday is 0, in order to control the position of the first print, it is necessary to set Sunday to 7
if(week==0){
week=7;
}
System.out.println("一\t二\t三\t四\t五\t六\t七");
//Control the spacing of printing
for(int b=1;b<week;b++){
System.out.print("\t");
}
//Print every day of the month
for(int d=1;d<=days;d++) {
System.out.print(d+"\t");
//Judge whether every day is Sunday
if ((yearTotalDays + monthTotalDays + d) % 7 == 0) {
//Wrap
System.out.println();
}
}
}
}
Comments
Post a Comment