万年历

以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. Tomcat安装和目录简介

    要知道动态的网页必须要有服务器的支撑! 1.知名的java web服务器 Tomcat:Apache组织发布,免费开源的,轻量级 JBoss.WebLogic是商用的,价格较高,但相对于开源的更加稳定 ...

  2. RepeatMasker使用中的问题

    RepeatMasker在运行时会先产生如下一个中间文件夹如RM_23346.WedAug301137422017,最后生成结果文件,例如.out,.masked,.tbl等 软件特性:软件运行很慢, ...

  3. Webpack 2 视频教程 015 - Webpack 2 中的文件压缩

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  4. redmine 安装(Centos 6.5 x64)

    参考:http://www.linuxidc.com/Linux/2015-03/115545.htm 平台搭建 1)基础环境 yum -y install libyaml-devel zlib-de ...

  5. SSM整合---实现全部用户查询

    SSM整合 准备 1.创建工程 2.导入必须jar包 链接: https://pan.baidu.com/s/1nvCDQJ3 密码: v5xs 3.工程结构 代码 SqlMapConfig < ...

  6. ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

    ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...

  7. Java学习笔记12(面向对象五:构造方法、this再探)

    在开发中,经常需要在创建对象的同时明确对象对的属性值, 比如一个Person对象创建时候就应该有age和name等属性 那么如何做到在创建对象的同时给对象的属性初始化值呢? 这里介绍构造方法: 1.构 ...

  8. [笔记]《JavaScript高级程序设计》- 最佳实践

    一.可维护性 1 什么是可维护的代码 可理解性--其他人可以接受代码并理解它的意图和一般途径,而无需原开发人员的完整解释. 直观性--代码中的东西一看就能明白,不管其操作过程多么复杂. 可适应性--代 ...

  9. 一些关于memcpy memmove函数的区别,和模拟实现

    memcpy: 它是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 函数原型:void* memcp ...

  10. myeclipse 扩展内存大小

    工具中修改设置Default VM ArgumentsWindows-> Preferences->Java->Installed JREs,点击右侧的jdk,然后点击"E ...