万年历

以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. Struts2-整理笔记(四)Action生命周期、如何获取参数(3种)、集合类型参数封装

    一.Action生命周期 每次请求到来时,都会创建一个新的Action实例 Action是线程安全的,可以使用成员变量接收参数 二.获取参数的方式(3种) 1.属性驱动获得参数 每次请求Action时 ...

  2. Spring aop 注解参数说明

    在spring AOP中,需要使用AspectJ的切点表达式语言来定义切点. 关于Spring AOP的AspectJ切点,最重要的一点是Spring仅支持AspectJ切点指示器(pointcut ...

  3. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...

  4. Head First设计模式之单例模式

    一.定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. Singleton模式中的实例构造器可以设置为protecte ...

  5. 在macOS上通过pyenv安装和切换多版本Python

    1. 安装homebrew 官网 http://brew.sh/index_zh-cn.html 打开终端,在终端中粘贴如下脚本 /usr/bin/ruby -e "$(curl -fsSL ...

  6. 解决myeclipse部署按钮不能点

    找到MyEclipse的工作路径(一般点开myeclipse是会显示),然后到这个目录中去“\.metadata\.plugins\org.eclipse.core.runtime\.settings ...

  7. 纯CSS二级纵向菜单

    纯CSS二级纵向菜单 <body> <div class="divda"> <div class="nav"> <ul ...

  8. Android Ptrace Inject

    之前介绍了Android平台上3种常见的hook方法,而hook的前提是进程注入,通过进程注入我们可以将模块或代码注入到目标进程中以便对其空间内的数据进行操作,本篇文章介绍基于ptrace函数的注入技 ...

  9. nmon进行性能分析

    在压测的时候,搭配nmon,可以很好的记录机器cpu情况,内存情况 下载 需要下载nmon和nmon analyser,到各自的官网下载. nmon可以根据自己的操作系统版本下载二进制文件,免去安装. ...

  10. 第一章 Linux系统概述

    linux是真正的多用户.多任务操作系统,他继承了UNIX系统的主要特征,具有强大的信息处理功能,特别在Internet和Intranet的应用中占有明显优势. 1.1计算机基础知识 计算机分为硬件和 ...