在页面上输出1900年以后任意一年的简易日历表

package text3;

import java.util.Scanner;

public class MyCalendar {
  public static void main(String[] args){
    String Weeks = " Su Mo Tu We Th Fr Sa "; //星期列表
    int i,j; //循环控制变量
    System.out.println("Please input the year you want to research:");
    int year = new Scanner(System.in).nextInt();
    //用于计算所给定年份1月1日为星期几,初值为1900年的1.1为周一
    int Ospa3 = 1;
    //从1900年开始,计算其后每一年的1.1为周几,直到求出指定年份的1.1日
    for(i = 1;i < year;i++){
      //若是闰年,其后年份的1.1日加两天,否则加一天
      if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
        Ospa3 += 2;
      else
        Ospa3++;
    }
    //由于七天为一周,所以Ospa3的最终值应为模7的余数
    Ospa3 %= 7;
    //输出日历第一行提示信息
    System.out.println("\t\t\tCalender of " + year);
    //输出星期列表,每行显示三个星期
    i = 1;
    while(i <= 3){
      System.out.print(Weeks);
      i++;
    }
    System.out.println("");
    //存放连续三个月的1日对应的星期和当月的总天数
    int spa1 = 0,spa2 = 0,spa3 = 0,cou1 = 0,cou2 = 0,cou3 = 0;
    //存放连续三个月的当前日期
    int day1 = 0,day2 = 0,day3 = 0;
    //判断当年是否为闰年,计算二月份的天数
    boolean leap = year %4 ==0 && year % 100 != 0 || year % 400 == 0;
    for(j = 1;j <= 28;j++){ //????为什么是28
      if((j-1)%7 == 0){
      day1 = 1;
      day2 = 1;
      day3 = 1; //设置连续3个月的日期输出均从1号开始
      //分别设置一年中每个月1日的星期,和当月的总天数
      switch(j/7){
      case 0:
        spa1 = Ospa3;
        cou1 = 31; //1月
        spa2 = (spa1 + cou1) % 7;
        cou2 = leap ?29:28; //2月
        spa3 = (spa2 + cou2) % 7;
        cou3 = 31; //3月
        Ospa3 = spa3;
        break;
      case 1:
        spa1 = (Ospa3 + cou3) % 7;
        cou1 = 30; //4月
        spa2 = (spa1 + cou1) % 7;
        cou2 = 31; //5月
        spa3 = (spa2 + cou2) % 7;
        cou3 = 30; //6月
        Ospa3 = spa3;
        break;
      case 2:
        spa1 = (Ospa3 + cou3) % 7;
        cou1 = 31; //7月
        spa2 = (spa1 + cou1) % 7;
        cou2 = 31; //8月
        spa3 = (spa2 + cou2) % 7;
        cou3 = 30; //9月
        Ospa3 = spa3;
        break;
      case 3:
        spa1 = (Ospa3 + cou3) % 7;
        cou1 = 31; //10月
        spa2 = (spa1 + cou1) % 7;
        cou2 = 30; //11月
        spa3 = (spa2 + cou2) % 7;
        cou3 = 31; //12月
        break;

      }

    }
    //在屏幕上输出日历,一行显示3个星期共输出21列
    for(i = 1;i <= 21; i++){
      if ((i-1)/7 == 0) //每一行的前七列输出第一个月
        System.out.print(spa1--<=0 && day1 <= cou1? day1 < 10?" 0"+
        day1++ :" " + day1++ :" ");
      else if((i - 1)/7 == 1)
        System.out.print(spa2--<=0 && day2 <= cou2? day2 < 10?" 0"+
        day2++ :" " + day2++ :" ");
      else
        System.out.print(spa3--<=0 && day3 <= cou3? day3 < 10?" 0"+
        day3++ :" " + day3++ :" ");
      if(i % 7 == 0)
        System.out.print(" ");//每行中月份之间的空格
    }
    System.out.println(" "); //换行
    }
  }
}

java 简易日历表的更多相关文章

  1. java简易编辑器

    package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...

  2. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  3. 补码一位乘法 Booth算法 Java简易实现

    本文链接:https://www.cnblogs.com/xiaohu12138/p/11955619.html. 转载,请说明出处. 本程序为简易实现补码一位乘法,若代码中存在错误,可指出,本人会不 ...

  4. Java简易日历的实现

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  5. mongo数据管理java简易版

    mongo是搭建在局域网服务器上的,处理起来比较麻烦,于是自己写了个简单的处理工具. 如果有对java操作mongo不太了解的也可以在这里看下简单的示例. 只有增删改查的功能,而且只支持json格式的 ...

  6. 纯Java——简易高并发框架

    转自:https://blog.csdn.net/MonkeyDCoding/article/details/81369610 0.源代码github-简易高并发框架 注:本篇博客知识来自于网课. 1 ...

  7. java简易excel导入导出工具(封装POI)

    Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...

  8. java简易DVD影片管理系统—面向对象

    public class DvdSet { String name [] =new String[15]; // DVD电影名称 String date [] =new String[15]; //D ...

  9. Java打印日历表

    今天来吐槽一下Java的Calendar类的使用问题,反正我是弄了半天. 首先是,遇到一个问题,输入年份和月份,需要打印这个月的日历,网上有不少代码,但我用了几个感觉都不是很靠谱. 然后经过一番探索, ...

随机推荐

  1. 2016android在线测试15-图像 camera2

    1.ImageView类用于显示各种图像,例如:图标,图片,下面对于ImageView类加载图片方法的描述有: void setImageResource(int resld): 设置Drawanbl ...

  2. ·分布式文件系统HDFS 练习

    作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 1.目录操作 在HDFS中为hadoop用户创建一个用户目录( ...

  3. 用DLL方式封装MDI子窗体

    用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用. 易于程式升级,当程式升级时,不用编 ...

  4. Predicting effects of noncoding variants with deep learning–based sequence model | 基于深度学习的序列模型预测非编码区变异的影响

    Predicting effects of noncoding variants with deep learning–based sequence model PDF Interpreting no ...

  5. java单元测试之如何实现异步接口的测试案例

    测试是软件发布的重要环节,单元测试在实际开发中是一种常用的测试方法,java单元测试主要用junit,最新是junit5,本人开发一般用junit4.因为单元测试能够在软件模块组合之前尽快发现问题,所 ...

  6. centos7.6环境编译安装php-7.2.24修复最新 CVE-2019-11043 漏洞

    先编译安装php-7.2.24,然后编译安装扩展 主版本地址地址:https://www.php.net/distributions/php-7.2.24.tar.gz # 编译 php-7.2.24 ...

  7. linux列出当前目录下的所有的目录?

    ###  列出当前目录下的所有目录: [root@localhost ~]# ls -ld * #列出所有的文件 drwxr-xr-x. root root Nov : elasticsearch d ...

  8. 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程

    转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...

  9. Spring cloud微服务安全实战-8-1课程总结

    总结 首先讲了api的安全.安全常见的风险.安全措施.然后我们把简单的api演化成一个这种微服务的架构. 首先讲了在网关上可以做哪些安全的措施.然后讲了如何搭建一个安全中心,也就是认证服务器,包括一些 ...

  10. linux广播

    linux广播 // 发送端 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #incl ...