日历打印

输入某年,打印出该年份的日历

 static void Main()
        {
            Console.WriteLine("请输入年份");
            int year = int.Parse(Console.ReadLine());
            PrintYearCalendar(year);
            Console.ReadLine();
        }

        // 判断平年以及闰年的方法
                private static bool IsLeapYear(int year)
        {
            return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
        }
        //判断某年某月有多少天
         private static int GetDaysByMonth(int year, int month)
        {
            if (month >0 && month < 13)
            {
                switch (month)
                {
                    case 2:
                        return IsLeapYear(year) ? 29 : 28;
                        case 4:
                    case 6:
                    case 9:
                    case 11:
                        return 30;
                    default:
                        return 31;
                }
                }
            else
            {
                return 0;
            }              
            }
            //根据年月日计算星期数的方法
             private static int GetWeekByDay(int year,int month,int day)
        {
            DateTime dt = new DateTime(year, month, day);
            return (int)dt.DayOfWeek;
        }
        //打印月历
         private static void PrintMonthCalendar(int year,int month)
        {
            //1.打印表头
            Console.WriteLine("{0}年{1}月",year,month);
            Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
            //2.计算当月1日星期数,输出空白(\t)
            int week= GetWeekByDay(year, month, 1);
            for (int i = 0; i<week;i++)
            {
                Console.Write("\t");
            }
            //3.计算当月天数,输入日
            int day = GetDaysByMonth(year, month);
            for (int i = 1; i <= day; i++)
            {
                Console.Write(i + "\t");
            //4.每逢周六换行
                if (GetWeekByDay(year, month, i) == 6)
                {
                    Console.WriteLine("\t");
                }
            }
      }
       //打印年历
       private static void PrintYearCalendar(int year)
        {
            for (int i = 1; i <= 12; i++)
            {
                PrintMonthCalendar(year, i);
                Console.WriteLine("\t");
            }
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是回复: 这个练习是要求我们编写一个程序,可以根据用户输入的年份和月份,打印出对应的日历。具体实现可以使用循环来完成,需要考虑到每个月的天数、每周的起始日等因素。这是一个比较综合的练习,可以帮助我们巩固循环和条件语句的使用,同时也可以提高我们的编程能力。 ### 回答2: 这道练习的目的是让我们通过编写程序来实现日历打印功能,从而巩固和练习Java中循环的运用。我们需要实现的是,输入年份和月份,可以打印出该月的日历,以及该月的第一天是星期几。 首先,我们需要了解计算机中时间和日期的存储方式。在计算机中,时间日期被存储为一个整数值,通常是从一个起始时间点开始算起的秒数。在Java中,可以使用Date和Calendar类来操作时间和日期。我们需要使用Calendar类来获取年份、月份、日期等信息。 其次,我们需要了解如何计算一个月的天数。Java中,可以使用Calendar类的getActualMaximum方法来获取某个月的最大天数。同时,我们还需要知道某一天是星期几,这可以使用Calendar类的get方法来获得。 接着,我们需要使用循环语句来完成日历打印。我们可以使用一个二维数组来存储日历。在打印日历时,我们需要注意格式的调整,如对齐、行末换行等。 最后,我们需要编写一个主程序来测试我们的日历打印功能。在主程序中,我们可以通过Scanner类来获取用户输入的年份和月份,然后调用我们编写的打印日历的方法来输出结果。 总的来说,这道练习对我们掌握Java中循环的应用非常有帮助,并且还锻炼了我们对于日期和时间的处理能力。在以后的学习和工作中,这些知识和技能都将得到广泛的应用。 ### 回答3: 练习-java循环综合练习四之日历打印。 这道题目要求我们能够编写程序,输入年份和月份,打印当月日历。具体来说,日历格式应该是一个7行5列的矩阵,其中第一行为星期一至星期五的名称,第二行开始则是具体的日期(从1号开始),并且按照每周从星期一开始的顺序排列。在打印日历的时候,需要考虑到每个月的天数是不同的,以及各个月之间的闰年情况。 为了实现这个功能,我们需要按照以下步骤进行编码: 1. 接收用户输入,包括年份和月份。 2. 计算当月的天数,需要考虑到闰年的情况。 3. 计算当月的第一天是星期几,以此来确定第一行的输出内容。 4. 循环输出日期,每7个为一组,输出一行。如果月末不在星期日,则需要在最后一行输出空格进行对齐。 5. 打印完毕后,需要输出一条分隔线进行标识,方便用户查看。 在编写代码的过程中,需要注意以下几点: 1. 闰年的计算方式是“4年一润,百年不润,四百年再润”,因此需要进行特判。 2. 计算星期几的时候,需要使用0~6来表示星期日至星期六。 3. 输出一行日期时,需要考虑当月的天数以及星期几,避免输出过多或不足的日期。 综上,我们可以写出如下的伪代码: ``` 输入年份和月份 计算当月的天数,包括闰年计算 计算当月第一天是星期几 打印第一行星期几的名称 定义变量dayCount为1 循环输出日期: 输出dayCount的值,并令dayCount加1 如果dayCount恰好是周六,则换行 判断dayCount是否超过当月天数,如果是则跳出循环 如果最后一天不是周日,则输出空格对齐 输出分隔线 ``` 至此,我们已经完成了这道题目的准备工作。接下来需要进行具体代码实现,这里就不再赘述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值