在学习用java语言编程一段时间后对方法的调用有了一定的理解,以下是我利用方法调用完成对
日历的打印(注:我的起始日期为1999.1.1)
该题主要考虑平年355天,闰年366天,以及平年的2月份28天,闰年2月份29天
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner q = new Scanner(System.in);
System.out.println("年");
int d = q.nextInt();
System.out.println("月");
int f = q.nextInt();
int daycount = getDelta( d, f);
int g=monthfe(d,f);
System.out.print("星期一"+"\t");//打印一排固定放日期的位置
System.out.print("星期二"+"\t");
System.out.print("星期三"+"\t");
System.out.print("星期四"+"\t");
System.out.print("星期五"+"\t");
System.out.print("星期六"+"\t");
System.out.println("星期日"+"\t");
int num=0;//计数插入的空格数
//确认所求月份的一号是星期几如果不是周一就在前面补齐空格
for(int n=1 ;n<=(daycount)%7;n++){
System.out.print(" "+"\t\t");
num++;
}
for(int m=1;m<=g;m++){
if((m+num)%7==0){ //没打印七个就换一次行
System.out.println(m+"\t\t");
}
else {
System.out.print( m+"\t\t");
}
}
}
public static int getDelta(int tyear,int tmonth){
int days=0;
int tdays=getdays(tyear,tmonth);
for(int i=1900;i<tyear;i++){//求所求年份与1900相差的年份
days+=ryear(i)?366:365;//ryear(i)返回true的话就是闰年年返回366平年355
}
return days+tdays-1;
}
//用来返回所求月份1号是所在该月的第几天
public static int getdays(int year ,int month){
int days=1;
for(int m=1;m<month;m++){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
days+=31;
}else if(m==4||m==6||m==11||m==9){
days+=30;
}else{
days+=ryear(year)?29:28;
}
}
return days;
}
//用来返回所求月份与1900一月相差的月份天数
public static int monthfe(int year ,int month){
int monthdays=0;
for(int m=month;m<=12;m++){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
return monthdays=31;
}else if(m==4||m==6||m==11||m==9){
return monthdays=30;
}else{
return monthdays=ryear(year)?29:28;
}
}
return monthdays;
}
// 判断相差年份是否有闰年
public static boolean ryear(int year){
return year%4==0&&year%100!=0||year%400==0;
}
}