A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zapoo 中级黑马   /  2016-2-16 20:19  /  748 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)

运行结果

运行结果

1 个回复

倒序浏览
在这说一下,由于那个计算星期的算法有问题,导致有的月份输入的格式不对!!!你们可以找一个更好算法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马