import java.util.Scanner;

/**

* 1. 定义万年历类,定义年月日属性

2.编写接收年判断是否是闰年的方法,并返回一个布尔值

3.编写接收年月日计算总天数方法,并返回总天数

4.编写接收年月日输出该日是星期几方法,已知1900年1月1日是星期一。

5.编写可无限循环接收年月日打印该月日历方法。

* @author caiyu

*

*/

public class shixun10 {

Scanner i = new Scanner(System.in);

public int year;

public int month;

public int day;

// 判断是否为闰年

public boolean isRun(int year) {

boolean isRn = false;

isRn = ((year % 4 == 0) && !(year % 100 == 0) || year % 400 == 0);

return isRn;

}

// 该月有多少天

public int monthSumDay(int yaar, int month) {

int day = 0;

switch (month) {

case 2:

if (isRun(year)) {

day = 29;

} else {

day = 28;

}

break;

case 4:

case 6:

case 9:

case 11:

day = 30;

break;

default:

day = 31;

break;

}

return day;

}

// 得到至这一天是这一年的多少天

public int totalDay(int year, int month, int day) {

int sumDay = 0;// 总天数

// 难点一

for (int i = 1900; i < year; i++) {

if (isRun(i)) {

sumDay = sumDay + 366;// 闰年366天

} else {

sumDay = sumDay + 365;// 平年365天

}

}

// 计算当年距离1900年1月1日的总天数

// 再算当年的总天数

int beforeDay = 0;

int d = 0;// 当月日期数

// 难点二

for (int i = 1; i < month; i++) {

switch (i) {

case 2:

if (isRun(year)) {

d = 29;

} else {

d = 28;

}

break;

case 4:

case 6:

case 9:

case 11:

d = 30;

break;

default:

d = 31;

break;

}// switch 结束

beforeDay = beforeDay + d;

}// 当年的总天数 循环结束

// 累加求出距离 1900年1月1日的总天数

sumDay = sumDay + beforeDay;

return sumDay;

}

// 接收年月日输出该日是星期几方法,已知1900年1月1日是星期一

public int weekNum(int year, int month, int day) {

int thisMonthFirstDay = 0;// 当月第一天是星期几

int temp = 1 + totalDay(year, month, day) % 7;

if (temp != 7) {

thisMonthFirstDay = temp;

}

return thisMonthFirstDay;

}

// 接收年月日打印该月日历方法

public void printCalendar(int year, int month, int day) {

// 调用上面的方法

int mfd = weekNum(year, month, day);

int sumDay = totalDay(year, month, day);

int monthSum = monthSumDay(year, month);

/* 格式输出日历 */

System.out.println("\n星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");

for (int i = 0; i < mfd; i++) {

System.out.print("\t");

}

for (int i = 1; i <= monthSum; i++) {

System.out.print(i + "\t");

// 难点三

if ((sumDay + i - 1) % 7 == 5) {// 是星期六 则要换行

System.out.println();

}

}

System.out.println();

}

// 显示万年历

public void show() {

System.out.println("******JVav万年历程序*****");

String isRun = "y";

while (isRun != "n") {

System.out.print("请输入年:");

int year = i.nextInt();

System.out.print("请输入月:");

int month = i.nextInt();

System.out.print("请输入日:");

int day = i.nextInt();

this.printCalendar(year, month, day);

System.out.print("\n是否继续(y/n):");

isRun = i.next();

}

}

}四、关键代码:

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐