java 制作简易日历_Java制作简单日历

1.用for循环、switch

以1990.01.01作为参考

public class Demo_9 {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.print("输入年、月(如:2020 01):");

int year = scan.nextInt();

int month = scan.nextInt();

int daysum = 0; // 天数加和

int week = 0; //初始化星期

//判断闰年,并将每年的天数相加

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

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {

daysum += 366;

} else {

daysum += 365;

}

}

//用循环将最后一年每个月天数相加

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

switch (i) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

daysum += 31;

break;

case 2:

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {

daysum += 29;

break;

} else {

daysum += 28;

break;

}

default:

daysum += 30;

}

}

//储存所查询的当前月的天数

int day = 0;

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

day = 31;

break;

case 2:

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {

day = 29;

break;

} else {

day = 28;

break;

}

default:

daysum += 30;

day = 30;

}

week = daysum % 7 + 1; //计算当前月的一号星期几

//制作日历

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

for (int i = 1; i < day + week; i++) {

if (i < week) {

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

} else {

if ((i - 1) % 7 == 0) {

System.out.println();

}

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

}

}

}

}

2.将重复的代码封装调用

public class Demo {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

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

int year = scan.nextInt();

int month = scan.nextInt();

int daysum = dayForMonth(year, month);

int week = dayForYear(year, month) % 7 + 1;

if (year < 1990) {

System.out.println("抱歉!1990年以前暂不支持!!!");

return;

}

if (daysum < 0) {

System.out.println("输入的月份有误,请重新输入!");

return;

}

System.out.println("\t\t" + " " + year + "年" + month + "月");

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

for (int i = 1; i <= daysum + week - 1; i++) {

if (i < week) {

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

} else {

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

if (i % 7 == 0) {

System.out.println("\n");

}

}

}

}

// 闰年的判断

public static boolean isLeapYear(int year) {

if (year % 400 == 0 || year % 4 == 0 && year % 400 == 0) {

return true;

} else {

return false;

}

}

// 每个月的天数

public static int dayForMonth(int year, int month) {

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

case 4:

case 6:

case 9:

case 11:

return 30;

case 2:

if (isLeapYear(year)) {

return 29;

} else {

return 28;

}

}

return -1;

}

// 从参考值到所求值的天数

public static int dayForYear(int year, int month) {

int day = 0;

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

if (isLeapYear(i)) {

day += 366;

} else {

day += 365;

}

}

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

day += dayForMonth(year, i);

}

return day;

}

}

3.总结

对于第一种方法,将一些代码重复使用,书写麻烦,观看不简洁。

对于第二种,将重复使用的代码进行封装,直接调用,程序出错修改方便。

小白还是第一次写博客,作为一名Java的初学者,在写第一种方法时,知识存储量不够,另外思维不够严谨,没有将出错情况编写进入,输入错误的数据也会出现答案,小白将自己的学习过程发出来,希望各位大佬们指点,一起加油进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值