打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一),要求:
(1)编写一个方法判断闰年;
(2)编写一个方法判断某年某月有多少天;
(3)编写一个方法计算某年某月前距离1900年1月1日的总天数;(4)编写一个输出某年某月日历的方法;
(5)编写一个测试方法。
package calendar;
import java.util.Scanner;
public class calendar {
public static void main(String args[]){
int year,month,sum,sum1;
System.out.print("请输入年份:\t");
for(;;){
year=getInput();
if(year>=1900)
break;
else
System.out.println("输入错误,请重新输入!");
}
System.out.print("请输入月份:\t");
for(;;){
month=getInput();
if(month>=1&&month<=12)
break;
else
System.out.println("输入错误,请重新输入!");
}
display(year,month);
}
public static int getInput(){ //输入数据
Scanner scan=new Scanner(System.in);
int i=0;
i=scan.nextInt();
return i;
}
public static int judge(int i){ //判断是否闰年
if(i%400==0||(i%100!=0&&i%4==0))
return 0;
else
return 1;
}
public static int monthTotal(int i,int j){ //判断i年j月有多少天
int leapyear[]={31,29,31,30,31,30,31,31,30,31,30,31};
int noleapyear[]={31,28,31,30,31,30,31,31,30,31,30,31};
int n,m;
n=judge(i);
if(n==0)
m=leapyear[j-1];
else
m=noleapyear[j-1];
return m;
}
public static int yearTotal(int i,int j){ //判断i年j月前距1900年1月1日有多少天
int n,m=0;
for(int yearNumber=1900;yearNumber<i;yearNumber++){
if(i==1900)
break;
n=judge(yearNumber);
if(n==0)
m+=366;
else
m+=365;
}
for(int monthYear=1;monthYear<j;monthYear++){
if(j==1)
break;
m+=monthTotal(i,monthYear);
}
return m;
}
public static void display(int i,int j){ //输出i年j月的日历
int sum,sum0,ss=0;
sum0=yearTotal(i,j);
sum=1+sum0%7;
System.out.println("-----"+i+"年"+j+"月-----");
System.out.println(" 日 一 二 三 四 五 六 ");
for(int z=1;z<=sum+monthTotal(i,j);z++){
if(z<=sum){
System.out.print(" ");
ss+=1;
}
else{
System.out.print(z-sum+" ");
ss+=1;
if(z-sum<10)
System.out.print(" ");
}
if(ss%7==0)
System.out.println();
}
}
}