java写万年历_用java代码写万年历

大家好,今天给大家分享万年历的编写。可能有人觉得这很难,假如输入不同的年和月,那么显示的月份天数不一样,然后还有平年闰年判断,又要算出不同年月前面的空格是多少,也要算出与日期对应的星期。前面这些问题看似有点复杂,但是如果把问题细分一下,逐个解决,然后再整合修改,万年历不就可以完成了吗?在这里我使用的是递归方法。我们一起来实现代码吧!

万年历是从1900年开始,有平年,闰年判断。

/**

\* 平闰年的判断

\* @param year 年

\* @return 返回年

*/

public static boolean isLeapYear(int year) {

//闰年就是能够被4整除并且不能被100整除或者能被400整除的数

return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;

}

之后就算最小年份和最大年份

/**

*

* @param maxYear

* 最大年份

* @param minYear最小年份

* @return

*/

public static int yearDate(int maxYear, int minYear) {

int sum = 0;

for (int i = minYear; i < maxYear; i++) {

if (isLeapYear(i)) {//如果是闰年就加366天

sum += 366;

} else {//如果不是是闰年就加365天

sum += 365;

}

}

return sum;

}

/**

* 获取今天是今年的的第几天

*

* @param year 参数 年

* @param month 参数 月

* @param date 参数 日

* @return

*/

public static int yearMonthDay(int year, int month, int date) {

int sum = 0;

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

if (i == 2) {

if (isLeapYear(year)) {//如果是闰年就加29天,否则加28天

sum += 29;

} else {

sum += 28;

}

} else if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {

sum += 31;

} else {

sum += 30;

}

}

sum += date;

return sum;

}

/**

* 1900年1月1号是星期一 ,计算出某年某日是星期几时

*

* @param year 参数 年

* @param month 参数 月

* @param date 参数 日

* @return

*/

public static int getWeek(int year, int month, int date) {

int sum = 0;

//调用获取今天是今年的的第几天方法

sum += yearMonthDay(year, month, date);

sum += yearDate(year, 1900);

//因为多加了1号,要自减

sum--;

int week=sum%7+1;

return week;

}

计算空格问题和换行问题

/**

* 定义空格数和换行规则

* @param e

* @param d

*/

public static void printDay1(int e,int d){

for(int i=0;i

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

}

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

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

if((i+e)%7==0){

System.out.println();

}

}

}

写在到这一步,下面就写一个关于万年历的方法

/**

* 万年历

*/

public static void wannianli(int y,int m){

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

int e=0;

int max=31;

if(m==2){

if(isLeapYear(y)){

max=29;

}else{

max=28;

}

}else if(m == 4 || m == 6 || m == 9 || m == 11 ){

max=30;

}

int week=getWeek(y, m, 1);

//因为星期是0-6,为了更好的规范效果所以-1

e=week-1;

printDay1(e,max);

}

最后把这这万年历方法放在主函数里面,输入一个年份月份在控制台输出就能得到结果

public static void main(String[] args) {

wannianli(2020,5);

}

结果为下图:

f7d7f46a47a09034832fdb766c632e61.png

完整代码是:

public class Work1 {

public static void main(String[] args) {

wannianli(2020,5);

}

/**

* 万年历

*/

public static void wannianli(int y,int m){

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

int e=0;

int max=31;

if(m==2){

if(isLeapYear(y)){

max=29;

}else{

max=28;

}

}else if(m == 4 || m == 6 || m == 9 || m == 11 ){

max=30;

}

int week=getWeek(y, m, 1);

e=week-1;

printDay1(e,max);

}

/**

* 定义空格数和换行规则

* @param e

* @param d

*/

public static void printDay1(int e,int d){

for(int i=0;i

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

}

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

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

if((i+e)%7==0){

System.out.println();

}

}

}

/**

* 平闰年的判断

* @param year

* @return

*/

public static boolean isLeapYear(int year) {

return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;

}

/**

*

* @param maxYear

* 最大年份

* @param minYear最小年份

* @return

*/

public static int yearDate(int maxYear, int minYear) {

int sum = 0;

for (int i = minYear; i < maxYear; i++) {

if (isLeapYear(i)) {

sum += 366;

} else {

sum += 365;

}

}

return sum;

}

/**

* 获取今天是今年的的第几天

*

* @param year

* @param month

* @param date

* @return

*/

public static int yearMonthDay(int year, int month, int date) {

int sum = 0;

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

if (i == 2) {

if (isLeapYear(year)) {

sum += 29;

} else {

sum += 28;

}

} else if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {

sum += 31;

} else {

sum += 30;

}

}

sum += date;

return sum;

}

/**

* 1900年1月1号是星期一 ,计算出某年某日是星期几时

*

* @param year

* @param month

* @param date

* @return

*/

public static int getWeek(int year, int month, int date) {

int sum = 0;

sum += yearMonthDay(year, month, date);

sum += yearDate(year, 1900);

sum--;

int week=sum%7+1;

return week;

}

}

以上就是本期的内容,谢谢你的观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用Java实现的万年历代码: ```java import java.util.Scanner; public class Calendar { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入年份:"); int year = scanner.nextInt(); System.out.print("请输入月份:"); int month = scanner.nextInt(); int[][] calendar = new int[6][7]; int days = getDaysOfMonth(year, month); int firstDayOfWeek = getFirstDayOfWeek(year, month); int day = 1; for (int i = 0; i < 6; i++) { for (int j = firstDayOfWeek; j < 7 && day <= days; j++) { calendar[i][j] = day; day++; } firstDayOfWeek = 0; // 每行第一个元素的列索引是0 } System.out.println("\n\t\t" + year + "年" + month + "月"); System.out.println("\t日\t一\t二\t三\t四\t五\t六"); for (int i = 0; i < 6; i++) { System.out.print((i+1) + "\t"); for (int j = 0; j < 7; j++) { if (calendar[i][j] != 0) { System.out.print(calendar[i][j] + "\t"); } else { System.out.print("\t"); } } System.out.println(); } } /** * 获取指定年月的天数 * @param year 年份 * @param month 月份(1-12) * @return 天数 */ public static int getDaysOfMonth(int year, int month) { int days; switch (month) { case 2: days = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28; break; case 4: case 6: case 9: case 11: days = 30; break; default: days = 31; } return days; } /** * 获取指定年月第一天是星期几 * @param year 年份 * @param month 月份(1-12) * @return 星期几(0-6,0表示星期日) */ public static int getFirstDayOfWeek(int year, int month) { int century = year / 100; year %= 100; int dayOfWeek = (year + year/4 + century/4 - 2*century + 26*(month+1)/10) % 7; if (dayOfWeek < 0) { dayOfWeek += 7; } return dayOfWeek; } } ``` 代码中,首先从控制台读取用户输入的年份和月份,然后根据输入的年月计算出当月的天数和第一天是星期几,最后使用一个二维数组来保存日历中的日期,并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值