大家好,又见面了,我是你们的朋友全栈君。
package com.zll;
import java.util.Scanner;
/**
* 总结:遇到的bug把传入判断年份的日期都传成输入的year了,应该传入要计算的每一年,所以导致
* 计算年份时的不正确所以总天数一直不对。
*/
public class Calendar {
public static void main(String[] args) {
//1900.1~~1900.2总天数 一年是365天
// 1、3、5、7、8、10、12月每月31天
//4,6,9,11为30天
// 2月闰年29天,不是闰年就是28天。
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year=sc.nextInt();
System.out.println("请输入月份:");
int month=sc.nextInt();
long day=0;//每月有多少天
long sum=0;//总天数
for(int i=1900;i<=year;i++){//循环从1900年到你输入年的多少天,不包括输入月份的天数
if(i==year){//计算了你输入年的月份的天数
long t;//计算输入月份返回的天数
for(int z=1;z<month;z++){//从1990年1月开始,就是0天,month小于你月份
t=Calday(z,day,i);
sum+=t;
}
}else{//这个是计算年份的天数
// long d;
// for(int j=1;j<=12;j++){
// d=Calday(j,day,i);
// sum+=d;
// }
//优化一下
boolean flag=year(i);//调用判断闰年的函数year
if(flag){
sum+=366;//返回true为闰年
}else {
sum+=365;
}
}
}
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:
boolean flag=year(year);
if(flag==true){
day=29;
}else{
day=28;
}
break;
}
printCal(day,sum);//调用打印方法
System.out.println("\n\n总天数:"+sum);
}
/**
* 打印输出这个月的日期
* @param day 这个月有多少天
* @param sum 总天数
*/
public static void printCal(long day,long sum){
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
int k3=(int)((sum+1)%7);//星期几
for(int i=1;i<=day;i++){//动态显示i<=多少天
if(i==1){
for(int j=0;j<k3;j++){
System.out.print("\t\t");
}
}
System.out.print(i+"\t\t");
if((sum+i)%7==6){
System.out.println();
}
}
}
/**
* 计算闰年
* @param year
* @return boolean类型的如果为true则为闰年
*/
public static boolean year(int year){
if((year%4==0 && year%100!=0) || (year%400==0)){
return true;
}
return false;
}
/**
* 计算每个月有多少天
* @param j 传入的月份
* @param day 这个月有多少天
* @param year 传入你要计算的年
* @return
*/
public static long Calday(int j,long day,int year){
switch (j){
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:
boolean flag=year(year);
if(flag==true){
day=29;
}else {
day=28;
}
break;
}
return day;
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155272.html原文链接:https://javaforall.cn