关于控制台输入年月,显示该月日历的问题分析

时间:2020-05-18
本文章向大家介绍关于控制台输入年月,显示该月日历的问题分析,主要包括关于控制台输入年月,显示该月日历的问题分析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

 以2020年5月为例,输出日历如下

简单的思路的分析:

该月有多少天,第一天是星期几;

该年是否为闰年;

因为1990年1月1号为周一,通过输入日期距离它的天数利用余数可以知道当月第一天为周几。

利用代码进行分析

首先导包与控制台的输入

再判断该年是不是闰年,并判断每月的天数

计算从1990年1月1号到该年1月1号的天数和,再计算该年1月1号到本月的天数,将天数和相加;

判断当前月的第一天是周几,可以利用余数来解决

最后输出当前年月的日历,对于在当月第一天之前的用空格代替

完整的代码如下:

package part;

import java.util.Scanner;

public class Test {
public static void main(String[] args) {

//控制台输入年和月,输出该月的日历
Scanner input = new Scanner(System.in);
int year, month;
System.out.println("请输入年份:");
year = input.nextInt();
System.out.println("请输入月份:");
month = input.nextInt();

//判断该年是不是闰年,及确定每月有多少天
boolean isleap = false;
if((year%4 == 0 && year%100!= 0) || (year%400 == 0)){
isleap = true;
}else{
isleap = false;
}
int monthDays = 0;
switch (month){
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; // 2月份
default:
monthDays = isleap? 29:28;
break;
}


//因为1990年一月一号为星期一,按照年份差距计算天数,月份距离本年1月1日有多少天,两部分求和
int yearsum = 0;
int monthsum = 0;
int sum = 0;
// 计算年份相差的天数,当为闰年则为366,否则为365天
for (int i = 1990; i<year;i++){
if ((i%4 == 0 && i%100 != 0) || (i%400 == 0)){
yearsum += 366;
}else{
yearsum += 365;
}
}
// 计算月份距离本年1月1日的天数
for (int i = 1; i < month; i++){
switch (i){
// 大月份
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
monthsum+= 31;
break;
// 小月份
case 4: case 6: case 9: case 11:
monthsum += 30;
break;
// 2月份
default:
monthsum += isleap? 29:28;
break;
}
}
// 两部分之和即相距天数
sum =yearsum + monthsum;


//计算当前月第一天是周几 已知1990年1月1日是周一,根据上一步计算的时间距离求

int week = (sum%7) + 1; // 总天数%7 + 1 除掉所有整星期数后的数字则为星期几

//打印当前月日历
System.out.println("日\t一\t二\t三\t四\t五\t六");

// 打印可能的空白
for (int i = 0;i<week;i++){ //将空白赋值在week前面
System.out.print("\t");
}

// 打印日历
for (int i = 1;i<=monthDays;i++){
System.out.print(i + "\t");
if ((i+week)%7 == 0){
System.out.println();
}
}
System.out.println();

}
}

原文地址:https://www.cnblogs.com/afeiiii/p/12910872.html