JAVA练习:利用JAVA基本语句实现打印日历

已知1900年1月1日是星期一,要求打印输入年月的日历。

输出结果格式:

日    一    二    三    四    五    六
                                          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

思路分析:

  1. 对1900年到输入年份之间的天数进行累加求和,闰年366天,平年365天。
  2. 对输入月份之间的月份天数进行累加求和
  3. 得到1900-1-1到输入年月之前所有天数,对总天数模7运算,即对7求余,加1之后即为该月1号的星期
  4. 计算输入月份有多少天
  5. 控制格式打印日历

参考源码如下:

import java.util.Scanner;

// 运行这段代码记得修改类名和包名
public class HomeWork {

    /*
     * @ 利用简单的for,switch,if语句实现打印输入年月的月份表 。
     * @ 该程序只做练习用,不考虑非法输入情况
     */
    public static void main(String[] args) {

        int date = 0; // 存放输入的年月后计算得到的1号的星期
        int day_max = 0;// 存放输入的年月的月的天数

        int year = 0;// 用来保存输入的年份
        int month = 0;// 用来保存输入的月份

        Scanner in = new Scanner(System.in);
        System.out.print("请输入年份:");
        year = in.nextInt();
        System.out.print("请输入月份:");
        month = in.nextInt();
        System.out.println("输入的日期为:" + year + "-" + month);
        in.close();

        int day_sum = 0;
        // 对1900~year之间的年份进行累加天数
        for (int i = 1900; i < year; i++) {
            // 判断是否是闰年
            if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
                // 闰年366天
                day_sum += 366;
            } else {
                // 平年365天
                day_sum += 365;
            }
        } // for

        // 对月份进行累加计算
        for (int i = 1; i < month; i++) {
            switch (i) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    day_max = 31;
                    day_sum += 31;
                    break;
                case 2:
                    // 判断是否是闰年
                    if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
                        // 闰年2月29
                        day_sum += 29;
                    } else {
                        // 平年2月28
                        day_sum += 28;
                    }
                    break;
                default:
                    day_sum += 30;
                    break;
            }
        } // for

        date = 1 + day_sum % 7; // 存放输入的日期计算得到的星期,1900年1月1日星期一
        System.out.println("输入的日期为:" + year + "-" + month + ",这个月的1号是星期" + date);
        // 如果是星期日,开头则 不用空出来距离
        // 此处之后date变量表示这月1号前面制表符的个数
        if (date == 7) {
            date = 0;
        }
        // 判断这个月份多少天
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day_max = 31;
                break;
            case 2:
                // 判断是否是闰年
                if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
                    // 闰年2月29
                    day_max = 29;
                } else {
                    // 平年2月28
                    day_max = 28;
                }
                break;
            default:
                day_max = 30;
                break;
        }
        System.out.println("==================================================");

        // 输出表头
        System.out.print("日\t一\t二\t三\t四\t五\t六\n");

        int day = 1;// 打印的天数

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 7; j++) {
                // 打印第一行的时候,空出前date个空间
                if (i == 0 && j < date) {
                    System.out.print("\t");
                    // 跳出当前次循环
                    continue;
                }

                if (day > day_max) {
                    break;
                }
                System.out.print(day + "\t");
                day++;
            }
            // 打印完一行后换行
            System.out.println();
        }
        System.out.println("==================================================");
    }
}

运行结果:

JAVA练习:利用JAVA基本语句实现打印日历_第1张图片

其他方式:JAVA练习:利用JAVA Calendar类实现打印日历

你可能感兴趣的:(JAVA基础练习源码,Java日历打印,1900)