zoukankan      html  css  js  c++  java
  • 关于控制台输入年月,显示该月日历的问题分析

     以2020年5月为例,输出日历如下

    简单的思路的分析:

    该月有多少天,第一天是星期几;

    该年是否为闰年;

    因为1990年1月1号为周一,通过输入日期距离它的天数利用余数可以知道当月第一天为周几。

    利用代码进行分析

    首先导包与控制台的输入

    再判断该年是不是闰年,并判断每月的天数

    计算从1990年1月1号到该年1月1号的天数和,再计算该年1月1号到本月的天数,将天数和相加;

         

    判断当前月的第一天是周几,可以利用余数来解决

    最后输出当前年月的日历,对于在当月第一天之前的用空格代替

    完整的代码如下:

    package part;

    import java.util.Scanner;

    public class Test {
    public static void main(String[] args) {

    //控制台输入年和月,输出该月的日历
    Scanner input = new Scanner(System.in);
    int year, month;
    System.out.println("请输入年份:");
    year = input.nextInt();
    System.out.println("请输入月份:");
    month = input.nextInt();

    //判断该年是不是闰年,及确定每月有多少天
    boolean isleap = false;
    if((year%4 == 0 && year%100!= 0) || (year%400 == 0)){
    isleap = true;
    }else{
    isleap = false;
    }
    int monthDays = 0;
    switch (month){
    case 1: case 3: case 5: case 7: case 8: case 10: case 12: // 大月份
    monthDays = 31;
    break;
    case 4: case 6: case 9: case 11: // 小月份
    monthDays = 30;
    break; // 2月份
    default:
    monthDays = isleap? 29:28;
    break;
    }


    //因为1990年一月一号为星期一,按照年份差距计算天数,月份距离本年1月1日有多少天,两部分求和
    int yearsum = 0;
    int monthsum = 0;
    int sum = 0;
    // 计算年份相差的天数,当为闰年则为366,否则为365天
    for (int i = 1990; i<year;i++){
    if ((i%4 == 0 && i%100 != 0) || (i%400 == 0)){
    yearsum += 366;
    }else{
    yearsum += 365;
    }
    }
    // 计算月份距离本年1月1日的天数
    for (int i = 1; i < month; i++){
    switch (i){
    // 大月份
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
    monthsum+= 31;
    break;
    // 小月份
    case 4: case 6: case 9: case 11:
    monthsum += 30;
    break;
    // 2月份
    default:
    monthsum += isleap? 29:28;
    break;
    }
    }
    // 两部分之和即相距天数
    sum =yearsum + monthsum;


    //计算当前月第一天是周几 已知1990年1月1日是周一,根据上一步计算的时间距离求

    int week = (sum%7) + 1; // 总天数%7 + 1 除掉所有整星期数后的数字则为星期几

    //打印当前月日历
    System.out.println("日 一 二 三 四 五 六");

    // 打印可能的空白
    for (int i = 0;i<week;i++){ //将空白赋值在week前面
    System.out.print(" ");
    }

    // 打印日历
    for (int i = 1;i<=monthDays;i++){
    System.out.print(i + " ");
    if ((i+week)%7 == 0){
    System.out.println();
    }
    }
    System.out.println();

    }
    }

  • 相关阅读:
    13.ng-value
    Android 下使用 JSON 实现 HTTP 请求,外加几个示例!
    PHP完整的AES加解密算法使用及例子(256位)
    常用对称加密算法(DES/AES)类(PHP)
    随机字符串生成算法
    JAVA实现AES加密
    Base64的好处
    什么是VC、PE、LP、GP?
    mysql update操作
    iOS开发:用DES对字符串加解密
  • 原文地址:https://www.cnblogs.com/afeiiii/p/12910872.html
Copyright © 2011-2022 走看看