黑马程序员技术交流社区

标题: 打印日历 [打印本页]

作者: zapoo    时间: 2016-2-16 20:19
标题: 打印日历
package com.calender.java;
import java.util.Scanner;
public class Calendar {

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入年份");
                int year = sc.nextInt();
                System.out.println("请输入月份");
                int month = sc.nextInt();
               
                boolean flag = isLeapYear(year);
               
                //System.out.println(flag);
                int monthSumDay = getMonthDay(month, flag);
                //System.out.println(monthDay);
                int week = getWeek(year, month);
                //System.out.println(week);
               
                print(year, month);
                formPrint(monthSumDay,week);
        }
        //输出表头
        public static void print(int year, int month) {
                System.out.println("\t" + "\t" + "<" + year + "年" + month + "月" + ">");
                System.out.println("星期日" + "\t" + "星期一" + "\t" + "星期二" + "\t" + "星期三" +
                "\t" + "星期四" + "\t" + "星期五" + "\t" + "星期六");
        }
       
        //判断是否是闰年
        public static boolean isLeapYear(int year) {
                boolean flag = false;
                if((year % 100 == 0 && year % 400 == 0) || (year % 4  == 0 && year % 100 != 0)) {
                        flag = true;
                }
                return flag;
        }
        //判断某年某月的第一天是星期几(由于这个算法有问题,导致日历输入有一点问题)
        public static int getWeek(int year, int month) {
                int week = 0;
                int realYear = (year % 10) + (year / 10 % 10) * 10;
                //System.out.println(realYear);
                if(month == 1) {
                        month = 13;
                } else if(month == 2) {
                        month = 14;
                }
                week = realYear + realYear / 4 + 20 / 4 - 2 * 20
                                + (26 * (month + 1)) / 10;
                week %= 7;
                return week;
        }
       
        //给每个月份赋值
        public static int getMonthDay(int month, boolean flag) {       
                int[] arrMonth = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
                if(flag == true) {
                        arrMonth[2] = 29;
                } if(flag == false) {//用==号
                        arrMonth[2] = 28;
                }
                return arrMonth[month];
        }
       
        public static void formPrint(int monthSumDay, int week) {
                for(int i = 0; i < week; i++) {
                        System.out.print("\t");
                }
               
                for(int  i = 1; i <= monthSumDay; i++) {
                        System.out.print(i + "\t");
                        if((i + week) % 7 == 0) {
                                System.out.println();
                        }
                }       
        }
}


结果.PNG (7.68 KB, 下载次数: 16)

运行结果

运行结果

作者: zapoo    时间: 2016-2-16 20:20
在这说一下,由于那个计算星期的算法有问题,导致有的月份输入的格式不对!!!你们可以找一个更好算法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2