【Java面试题】利用java输入年月,输出相应年月的日历(for循环,if语句,switch语句)

    xiaoxiao2023-09-30  156

    问题:

    输入年和月,自动打印对应年月的日历。

    补充知识:

    1970年是Unix系统诞生的时间,所以人们把1970年定为Unix的元年,1970年1月1号是星期四。(这是计算机的一个参考值)

    思路(仅供参考):

    首先应该计算出这个月1号是星期几。要想解决1号是星期几,就得先计算出年天数,即截至这一年1月1号的天数。用for循环,从1970年开始,闰年+366,平年+365;计算出月天数,即截至本月1号的天数。再用for循环,从1月份开始,算出月天数;再用到闰年判断,再用switch来判断返回月天数。用年天数加月天数,求得本月1号距离1970年1月1号的总天数。用总天数来判断本月1号是星期几。判断本月的总天数(用到switch语句)。打印输出日历。

     

    package workspace; import java.util.Scanner; public class calendar { public static void main(String[] args) { /** * 1.先在页面版上提示输入信息 2.利用for循环判断从1970年到这一年的1月1号的总天数(润平年)。 * 3.再判断这年到该月份1号的天数,涵盖(if)润平年,确定1号星期几 4.确定这个月的天数(switch语句),然后开始打印 */ // 信息输入 Scanner s = new Scanner(System.in); try { System.out.println("请输入年份:"); int year = s.nextInt(); System.out.println("请输入月份:"); int month = s.nextInt(); // 从1970.01.01开始天数累加 int daysum = 0; for (int i = 1970; i < year; i++) { if (i % 4 == 0 && i % 100 != 0 || i % 100 == 0 && i % 400 == 0) { daysum += 366; } else { daysum += 365; } } // 这年到该月份1号的天数 for (int i = 0; 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 % 100 == 0 && year % 400 == 0) {// 判断润平年 daysum += 29; } else { daysum += 28; } break; default: daysum += 30; break; } } int zhou = 1 + daysum % 7; // 判断该月1号星期几 int max = 0;// 开始这个月的天数 switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: max += 31; break; case 2: if (year % 4 == 0 && year % 100 != 0 || year % 100 == 0 && year % 400 == 0) { max += 29; } else { max += 28; } break; default: max += 30; break; } System.out.println("**************" + year + "年 " + month + "月*************"); System.out.println("一\t二\t三\t四\t五\t六\t日"); int day = 1; for (int i = 0; i < 5; i++) {// 一个月的跨度最多5周 for (int j = 0; j < 7; j++) {// 一周只有7天 if (i == 0 && j < zhou) {// 没有值就空着,往下写 System.out.print("\t"); continue; } if (day > max) {// 超过天数就终止 break; } System.out.print(day + "\t"); day++;//天数累加,直到月天 } System.out.println();// 打印完一行后换行 } } catch (Exception e) { System.out.println("输入的年份或者月份不符合规范!!!"); } }

     输出样式:

    心得

          解决问题前一定要先分析问题,把大问题逐步分成小问题,理清逻辑,实现小问题的逻辑,整个问题就已经实现了百分之八十。

    不畏难,不强求!

     

    最新回复(0)