利用分支循环制——万年历项目
技术点:变量、分支、循环
需求分析:
原理
1900年1月1日是一个星期一。根据键盘输入的年份,月份,获取到1900年1月1日的总天数。然后除以7取余数,就是1号之前的空格的数量。然后后面直接打印本月的每一天日期就可以。每当要打印的日期+前面的空格数刚好是7的倍数,就该换到下一行打印。
举例:给定年份是2020年,5月,那就是要打印2020年5月的日历。
假如每行以星期一开头。
首先要计算出2020年4月30日到1900年1月1日的总天数:43950天。
然后除以7取余数,为4。那就表示1号前有4个空格。
最后要注意换行,打印的日期数字加上前面的4个空格,如果刚好是7的倍数,就该换行了。
import java.util.Scanner; /** 键盘上输入年份,月份,打印该月的日历 */ public class PerpetualCalendar { public static void main(String[] args) { /* * 分析: * 2020年,5月 * 1900年1月1日到2020年4月30日的总天数 * step1:求总天数 * 1900年,2019年:整年 * 闰年:366,365 * 不足整年,月份 * 30,31,29,28 * * step2:总天数%7,余数 * step3:打印日期 * 空格:就是上一步骤的余数 * 日历:打印数字 * 换行 */ // step1:要先获取年份和月份的数据: // A :先输出提示语句,并接受用户输入的年、月。 Scanner scan = new Scanner(System.in); System.out.println("请输入一个年份:"); int year = scan.nextInt(); System.out.println("请输入一个月份:"); int month = scan.nextInt(); // step2:要获取上个月底到1900年1月1日的总天数。 // B:用循环计算用户输入的年份距1900年1月1日的总天数。 int total = 0;//用于表示1900年1月1日到2020年4月30日的总天数。 //先求1900年到2019年到总天数 for (int i = 1900; i < year; i++) { //判断i是否是闰年 if(i % 4 == 0 && i % 100 !=0 || i % 400 == 0){ total += 366; }else{ total += 365; } } // C:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。 //再求2020年1月日到4月30日到总天数 for (int i = 1; i < month; i++) { //判断i月到天数 switch (i){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: total += 31; break; case 4: case 6: case 9: case 11: total += 30; break; case 2: //2月要判断year是否是闰年 if(year % 4 == 0 && year % 100 !=0 || year % 400 == 0){ total += 29; }else { total += 28; } break; } } // System.out.println(total); // step3:打印日历 // D:计算出1号前到空格数量:用总天数来计算输入月的第一天的星期数。 int kong = total % 7; // System.out.println(kong); // E:计算当前月有多少天,格式化输出这个月的日历! int day = 0;//要打印的这个月份的天数:2020年5月 switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 4: case 6: case 9: case 11: day = 30; break; case 2: //2月要判断year是否是闰年 if(year % 4 == 0 && year % 100 !=0 || year % 400 == 0){ day= 29; }else { day = 28; } break; } //格式化打印 /*一个中文对应两个字符*/ System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\t"); // System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t"); //先打印空格 for(int i =0;i<kong;i++){ System.out.print("\t\t"); } //打印日历 for(int i= 1;i<= day;i++){ System.out.print(i+"\t\t"); //换行 if((kong+i)%7==0){ System.out.println(); } } } } run: 请输入一个年份: 2020 请输入一个月份: 7 星期一 星期二 星期三 星期四 星期五 星期六 星期日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Java经典项目之万年历
最新推荐文章于 2022-12-02 14:41:45 发布