在家无聊突然想到写个日历玩玩,这里我用的最简单的方法做的一个日历查询,在JAVA控制台输出;
需求:根据用户输入的年份和月查询出当月的日历;
思路:1,你得知道每月的1号是这个月的星期几,;
2,这个月是闰月还是平月;
3,这个月是大月还是小月;
先就这几个思路,细节在下面慢慢来讲解;
先说几个公式:求润年 能被4整除并且不能被100整除或者能被400整除;
求这个月的1号是这个月的星期几 1900年到这个月的1号的总天数去模上7 模出来是几,这个月的1号就是这个月的星期几;、
最后做出来差不多就是下面这种形式:
代码我用几部分显示出来:
第一部分:在控制台接受用户的输入
第二部分:根据用户输入的年和月查询出距1900年一共有多少天
第三部分就是显示在控制台的判断(润平年和大小月)
在代码外边套上一个while(){}就能实现用户一直查询日历了,其实很简单,就是几个判断和循环。
下面是整个代码:
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) {
while(true){
int sum=0;
Scanner in =new Scanner(System.in);
System.out.println("\n"+"======日历======");
System.out.println("请输入要查询的年份");
int year=in.nextInt();
System.out.println("请输入要查询的月份");
int month=in.nextInt();
for(int i=1900;i<year;i++){
if(i%4==0 && i%100!=0 ||i%400==0){
//sum=sum+366;
sum+=366;
}else{
sum+=365;
}
}
for(int i=1;i<month;i++){
if(i==2){
if(year%4==0 && year%100!=0 || year%400==0){
sum+=29;
}else{
sum+=28;
}
}else{
if(i==4||i==6||i==9||i==11){
sum+=30;
}else{
sum+=31;
}
}
}
sum+=1;
int wekday=sum%7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<=wekday;i++){
System.out.print("\t");
}
//判断润,平年
if(month==2){
if(year%4==0&&year%100!=0||year%400==0){
for(int i=1;i<=29;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}else{
for(int i=1;i<=28;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}
continue;
}
//判断大小月
if(month==4||month==6||month==9||month==11){
for(int i=1;i<=30;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}else{
for(int i=1;i<=31;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}
System.out.println("\n"+"按任意键+enter键继续查询");
System.out.println("退出请扣1");
int endNum =in.nextInt();
if(endNum==1){
break;
}
}
}
}