通过编写程序,输入年份月份,实现判断年份是否为闰年,月份有多少天,然后打印日历。
1.首先通过boolean判断是否为闰年
public static boolean isRun(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))
{
return true;
}
else
{
return false;
}
}
2.然后用switch-case语句返回月份对应的天数,注意2月需要再次判断年份是否为闰年
public static int getMonthDays(int year,int month)
{
int days = 30; //默认每个月是30天
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if(MyCalendar.isRun(year))
{
days = 29;
}
else
{
days =28;
}
break;
}
return days;
}
3.这个是老师临时让加上去,写一个方法算出统计这个月的第一天的前一天距离1900-1-1过了多少天。
//先算整年的天数,再算这一年这个月第一天前一天之前的天数
public static int getTotalDays(int year,int month)
{
int totalDays = 0;
for(int i=1900;i<year;i++)
{
if(MyCalendar.isRun(i))
{
totalDays+=366;
}
else
{
totalDays+=365;
}
}
for(int i=1;i<month;i++)
{
totalDays+=MyCalendar.getMonthDays(year, i);
}
return totalDays;
}
最后写主函数(注意先打印前面的空格,再打印日期,日期是每七天一换行):
public static void main(String[] args) {
int year;//年份
int month;//月份
int days ;//这个月的天数
int totalDays;//这个月的第一天距离1900-1-1过来多少天
int day;//表示这个月的第一天是星期几?
Scanner in = new Scanner(System.in);
System.out.println("**********欢迎使用万年历************");
System.out.println("请输入年份:");
year = in.nextInt();
System.out.println("请输入月份:");
month = in.nextInt();
System.out.println("您输入的是:"+year+"年"+month+"月");
if(MyCalendar.isRun(year))
{
System.out.println(year+"年是闰年");
}
else
{
System.out.println(year+"年是平年");
}
days = MyCalendar.getMonthDays(year, month);
System.out.println(year+"年"+month+"月有:"+days+"天.");
totalDays = MyCalendar.getTotalDays(year, month);
System.out.println("这个月的第一天距离1900-1-1过了:"+totalDays+"天!");
totalDays++;
day = totalDays%7;
System.out.println("星期:"+day);
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
//先打印前面的空格
int iCount=0; //计数器
for(int i=0;i<day;i++)
{
System.out.print("\t\t");
iCount++;
}
//打印日期
for(int i=1;i<=days;i++)
{
System.out.print(i+"\t\t");
iCount++;
if(iCount%7==0)
{
System.out.println();
}
运行结果已经试过了,就不放在上边了,完整代码如下:
import java.util.Scanner;
/* 假设:1900-1-1 是星期一。
*
*
* */
public class MyCalendar {
//判断是否是闰年
public static boolean isRun(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))
{
return true;
}
else
{
return false;
}
}
//返回当月的天数
public static int getMonthDays(int year,int month)
{
int days = 30; //默认每个月是30天
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if(MyCalendar.isRun(year))
{
days = 29;
}
else
{
days =28;
}
break;
}
return days;
}
//统计这个月的第一天的前一天距离1900-1-1过了多少天。
public static int getTotalDays(int year,int month)
{
int totalDays = 0;
for(int i=1900;i<year;i++)
{
if(MyCalendar.isRun(i))
{
totalDays+=366;
}
else
{
totalDays+=365;
}
}
for(int i=1;i<month;i++)
{
totalDays+=MyCalendar.getMonthDays(year, i);
}
return totalDays;
}
public static void main(String[] args) {
int year;//年份
int month;//月份
int days ;//这个月的天数
int totalDays;//这个月的第一天距离1900-1-1过来多少天
int day;//表示这个月的第一天是星期几?
Scanner in = new Scanner(System.in);
System.out.println("**********欢迎使用万年历************");
System.out.println("请输入年份:");
year = in.nextInt();
System.out.println("请输入月份:");
month = in.nextInt();
System.out.println("您输入的是:"+year+"年"+month+"月");
if(MyCalendar.isRun(year))
{
System.out.println(year+"年是闰年");
}
else
{
System.out.println(year+"年是平年");
}
days = MyCalendar.getMonthDays(year, month);
System.out.println(year+"年"+month+"月有:"+days+"天.");
totalDays = MyCalendar.getTotalDays(year, month);
System.out.println("这个月的第一天距离1900-1-1过了:"+totalDays+"天!");
totalDays++;
day = totalDays%7;
System.out.println("星期:"+day);
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
//先打印前面的空格
int iCount=0; //计数器
for(int i=0;i<day;i++)
{
System.out.print("\t\t");
iCount++;
}
//打印日期
for(int i=1;i<=days;i++)
{
System.out.print(i+"\t\t");
iCount++;
if(iCount%7==0)
{
System.out.println();
}
}
}
}