万年历

以1900年1月1号星期一为时间原点
星期日 第一天
星期一 第二天
星期二 第三天
星期三 第四天
星期四 第五天
星期五 第六天
星期六 第七天
          

1.计算出当前日期距离原点的天数(例:2016/9/18)

      2015到1900之间有多少个瑞年和平年-->count1
      
 
      2016年一月到八月的总天数-->count2
      本月的一号
      count = count1+count2+1

2.计算出本月的一号是一周的第几天

       k = count%7;(打印一号前面有多少空格)

3.计算出该月有多少天

       maxDays

4.循环打印

       1.for(int i=1;i<=maxDays;i++)
       2.k充当指示器,到每周的第七天自动换行
       
 

 package com.bjsxt.game;
import java.util.Scanner;
public class Calendar {
public static boolean isLeapYear(int year){
if(year%4==0&&year%100!=0 || year%400==0){
return true;
}
return false;
} //计算当前月份的最大天数
public static int maxDays(int month,int year){ int maxDays;
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
maxDays = 31;
else if(month==4 || month==6 || month==9 || month==11)
maxDays = 30;
else{
if(isLeapYear(year))
maxDays = 29;
else
maxDays = 28;
}
return maxDays;
} //计算当前月份一号是一周的第几天
public static int count(int month,int year){
int k; //表示当前的输入值是一周的第几天
int r = 0, p = 0;
int count; //表示距离1970.1.1有多少天
//计算当前年份之前的瑞年和平年有多少个
for(int i=1900;i<year;i++){
if(isLeapYear(i))
r++;
else
p++;
}
count = 366*r+365*p;
//判断当前月份之前的总天数
for(int i=1;i<month;i++){
if(i==2){
if(isLeapYear(year))
count = count + 29;
else
count = count + 28;
}
else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
count = count + 31;
else
count = count + 30;
}
k = (count+1)%7+1;
return k;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in); System.out.print("请输入年:");
int year = input.nextInt(); System.out.print("请输入月:");
int month = input.nextInt(); System.out.print("请输入日:");
int day = input.nextInt(); int maxDays = maxDays(month,year); //计算当前输入的月份最大值是多少天
int k = count(month, year); //计算当前月份的1号是第几天 System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=0;i<k-1;i++){
System.out.print(" \t");
}
for(int i=1;i<=maxDays;i++){
System.out.print(i+"\t");
if(k%7 == 0){
System.out.println("\n");
k = 0;
}
k++;
}
}
}
 

算法,java代码实现打印万年历的更多相关文章

  1. 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...

  2. Java基础之打印万年历

          今天刚开的博客,第一篇博文,一篇关于Java基础的内容,水平有限,多多见谅,希望和大家在学习编程的路上共同进步. 问题:输入年,月,打印对应年月的日历.   示例: ----------- ...

  3. 算法-java代码实现基数排序

    基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1 ...

  4. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

  5. 算法-java代码实现希尔排序

    希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2 ...

  6. 算法-java代码实现堆排序

    堆排序 第7节 堆排序练习题 对于一个int数组,请编写一个堆排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2 ...

  7. 算法-java代码实现快速排序

    快速排序 对于一个int数组,请编写一个快速排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  8. 算法-java代码实现归并排序

    归并排序 对于一个int数组,请编写一个归并排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  9. 排序算法Java代码实现(二)—— 冒泡排序

    本篇内容: 冒泡排序 冒泡排序 算法思想: 冒泡排序的原理是:从左到右,相邻元素进行比较. 每次比较一轮,就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来. 代码实现: /** * ...

随机推荐

  1. 01-Java基础及面向对象

    JAVA基础知识 Java 是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门面向 Internet 的高级编程语言. Java 虚拟机(JVM ...

  2. 【转载】CSRF攻击及其应对之道

    在我最开始接触JavaEE时,我工作的第一个内容就是解决项目中存在的CSRF漏洞,当时的解决方法是在Referer添加token的方法.我对CSRF攻击的主要认知和解决的大部分思路都来自于这篇文章. ...

  3. 常用base.css

    ul { list-style: none;}a { text-decoration: none;} body,h1,h2,h3,h4,h5,h6,p,ul,ol,form { margin: 0; ...

  4. Tsung测试Tcp协议的应用或接口

    利用Tsung模拟基于Tcp的业务流程,实属无奈.因ConnectManager部署在linux下,其中,Loadrunner的winsocket因不支持linux platform而无法使用,而Jm ...

  5. Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

    2017年4月29日~5月1日,国际劳动节, 三天的小长假. 在国内,小长假往往是这样的: 然而我当时在戏称为"德村"(德国农村)的Walldorf出差并且住在Wiesloch, ...

  6. 【转载】Linux下的IO监控与分析

    近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performance and Tuning G ...

  7. ConcurrentHashMap源码阅读

    1. 前言 HashMap是非线程安全的,在多线程访问时没有同步机制,并发场景下put操作可能导致同一数组下的链表形成闭环,get时候出现死循环,导致CPU利用率接近100%. HashTable是线 ...

  8. 【读书笔记】【深入理解ES6】#10-改进的数组功能

    创建数组 在ES6之前,创建数组的方式主要有两种: 调用 Array 构造函数 用数组字面量语法 为了简化数组的创建过程,ES6新增了两个方法: Array.of() Array.from() Arr ...

  9. 一次完整的http的请求过程

    一个完整的http的完成请求过程: 输入网址-> 域名解析-> tcp的三次握手-> 建立tcp连接后发起http 请求-> 服务器响应http ,发送数据给浏览器->  ...

  10. JQEUI问题收集

    JQEUI问题收集大家在使用JQEUI的过程中如遇到任何问题或是建议均可在此留言,作者会尽快回复.JQEUI社区也在积极的开发中,敬请期待-- JQEUI官网:http://www.jqeui.com ...