import java.util.Scanner;
/**
键盘上输入年份,月份,打印该月的日历
*/
/*
* 分析:
* 2020年,5月
* 1900年1月1日到2020年4月30日的总天数
* step1:求总天数
* 1900年,2019年:整年
* 闰年:366,365
* 不足整年,月份
* 30,31,29,28
*
* step2:总天数%7,余数
* step3:打印日期
* 空格:就是上一步骤的余数
* 日历:打印数字
* 换行
*/
public class CalendarDemogai {
//声明两个全局的变量,在当前类中都可以使用(注意:因为要在static类型的方法中使用,所以变量前要加static)
private static int year;
private static int month;
public static void main(String[] args) {
// step1:要先获取年份和月份的数据:
// A :先输出提示语句,并接受用户输入的年、月。
inputData();
// step2:要获取上个月底到1900年1月1日的总天数。
// B:用循环计算用户输入的年份距1900年1月1日的总天数。
int total = totalDays();//用于表示1900年1月1日到2020年4月30日的总天数。
// step3:打印日历
// D:计算出1号前到空格数量:用总天数来计算输入月的第一天的星期数。
print(total);
}
//打印万年历
public static void print(int total){
int kong = total % 7;
// E:计算当前月有多少天,格式化输出这个月的日历!
int day = dayOfMonth(year,month);//要打印的这个月份的天数:2020年5月
//格式化打印
System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\t");
//先打印空格
for(int i =0;i<kong;i++){
System.out.print("\t\t");
}
//打印日历
for(int i= 1;i<= day;i++){
System.out.print(i+"\t\t");
//换行
if((kong+i)%7==0){
System.out.println();
}
}
}
//求总天数
public static int totalDays(){
//先求1900年到2019年到总天数
int total = 0;
for (int i = 1900; i < year; i++) {
//判断i是否是闰年
if(isLeapYear(i)){
total += 366;
}else{
total+= 365;
}
}
// C:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。
//再求2020年1月日到4月30日到总天数
for (int i = 1; i < month; i++) {
//判断i月到天数
total += dayOfMonth(year,i);
}
return total;
}
//输入数据
public static void inputData(){
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个年份:");
year = scan.nextInt();
System.out.println("请输入一个月份:");
month = scan.nextInt();
}
//求当前月的天数
public static int dayOfMonth(int year,int month){
//判断i月到天数
int days = 0;
switch (month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
//2月要判断year是否是闰年
if(isLeapYear(year)){
days = 29;
}else {
days = 28;
}
break;
}
return days;
}
//判断是否是闰年
public static boolean isLeapYear(int year){
if (year % 4 == 0 && year % 100 !=0 || year % 400 == 0){
return true;
}else {
return false;
}
}
}
小白学java——用方法封装后的万年历
这篇博客介绍了一个Java程序,用于输入年份和月份后打印对应月份的日历。程序通过计算从1900年1月1日到指定日期的总天数,确定每月第一天是星期几,然后格式化输出日历。涉及到的关键技术包括日期计算、闰年判断、循环和条件判断。
摘要由CSDN通过智能技术生成