万年历版本一
输入一个年份,再输入一个月份,把那个月的日历打印出来 (1900年1月1日是星期一)
适用于初学if,switch,for
import java.util.Scanner;
public class Test05{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份:");//2022
int year = scan.nextInt();
System.out.println("请输入月份:");//7
int month = scan.nextInt();
//计算年的总天数
int allDayOfYear = 0;
for(int i = 1900;i<year;i++){
if(i%4==0 && i%100!=0 || i%400==0){//闰年
allDayOfYear += 366;
}else{//平年
allDayOfYear += 365;
}
}
//计算月的总天数
int allDayOfMonth = 0;
for(int i = 1;i<month;i++){
switch(i){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
allDayOfMonth += 31;
break;
case 4:case 6:case 9:case 11:
allDayOfMonth += 30;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0){//闰年
allDayOfMonth += 29;
}else{//平年
allDayOfMonth += 28;
}
break;
}
}
//计算总天数
int allDay = allDayOfYear + allDayOfMonth + 1;
//计算星期
int week = allDay%7;
if(week == 0){//星期天
week = 7;
}
//计算当月的天数
int day = 0;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = 31;
break;
case 4:case 6:case 9:case 11:
day = 30;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0){//闰年
day = 29;
}else{//平年
day = 28;
}
break;
}
//打印日历
System.out.println(" --" + year + "年" + month + "月-- ");
System.out.println("一\t二\t三\t四\t五\t六\t日");
int num = 0;//记录何时换行的变量
//打印空格
for(int i = 1;i<week;i++){
System.out.print("\t");
num++;
}
//打印天数
for(int i = 1;i<=day;i++){
System.out.print(i + "\t");
num++;
if(num%7==0){
System.out.println();
}
}
}
}
万年历版本二
适用于初学方法
import java.util.Scanner;
public class 万年历2 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入年:");
int year=scan.nextInt();
System.out.println("请输入月:");
int month=scan.nextInt();
//计算到输入年的总天数
int allDayOfYear=getAllDayOfYear(1900, year);
//计算到输入月的总天数
int allDayOfMonth=getAllDayOfMonth(year,1, month);
//计算当月天数
int day=getDay(year, month);
//计算从1900年1月1日到输入月总天数
int allDay =allDayOfYear + allDayOfMonth + 1;
printCalendar(year, month, day, allDay);
scan.close();
}
//判断是否是闰年
public static boolean isLeapYear(int year){
if(year%4==0 && year%100!=0 || year%400==0){
return true;
}
return false;
}
//判断起始年到输入年的总天数
public static int getAllDayOfYear(int startYear,int endYear){
int allDayOfYear = 0;
for(int i=startYear;i<endYear;i++){
if(isLeapYear(i)){
allDayOfYear+=366;
}else{
allDayOfYear+=365;
}
}
return allDayOfYear;
}
//计算到输入月的总天数
public static int getAllDayOfMonth(int year,int startMonth,int endMonth){
int allDayOfMonth=0;
for(int i=startMonth;i<endMonth;i++){
allDayOfMonth+=getDay(year, i);
}
return allDayOfMonth;
}
//计算当月天数
public static int getDay(int year,int month){
int day=0;
switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day=31;
break;
case 4: case 6: case 9: case 11:
day=30;
break;
case 2:
if(isLeapYear(year)){
day=29;
}else{
day=28;
}
break;
}
return day;
}
//打印棋盘
public static void printCalendar(int year,int month,int day,int allDay){
System.out.println("\t"+year+"年"+month+"月的日历");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int week =allDay%7;
if(week%7==0){
week =7;
}
int num=0;
//计算1号前面的空格
for(int i=0;i<week;i++){
System.out.print("\t");
num++;
}
//打印日期
for(int i=1;i<=day;i++){
System.out.print(i+"\t");
num++;
if(num%7==0){
System.out.println();
}
}
}
}