万年历

以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. 巧用php中的array_filter()函数去掉多维空值

    一直一维array_filter() 函数只能去除一维数组,其实这个函数也能去除多维数组: $arr =[ '0'=>array(), '1'=>'false', '2'=>'tes ...

  2. 房上的猫:StringBuffer类

    一.使用StringBuffer类 StringBuffer类位于java.lang包中,是String类的增强类 步骤:  1.声明StringBuffer对象并初始化 StringBuffer s ...

  3. Sticky Footer 绝对底部的两种套路

    最近面了好几个前端,工作经验有高有低,居然都不知道绝对底部是什么,也没有人能说出一种实现方式,让我不禁感慨前端领域的良莠不齐 绝对底部,或者说 Sticky Footer,是一种古老且经典的页面效果: ...

  4. Java内存分配以及GC

    转自http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html  写的太棒了,简单易懂 Java垃圾回收概况 Java GC(Gar ...

  5. Linux 文件路径包含特殊字符的处理方式

    文件路径包含特殊字符的处理方式 1)只用转义符 \ 2)使用双引号 mv /home/".Sent Items"/ /home/".&XfJT0ZABkK5O9g ...

  6. Python 词云分析周杰伦《晴天》

    一.前言满天星辰的夜晚,他们相遇了...夏天的时候,她慢慢的接近他,关心他,为他付出一切:秋天的时候,两个人终於如愿的在一起,分享一切快乐的时光但终究是快乐时光短暂,因为杰伦必须出国深造,两人面临了要 ...

  7. [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

    接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...

  8. A session had already been started – ignoring session_start() 怎么办?

    php警告提示A session had already been started – ignoring session_start() 解决方案 访问log日志发现有个这样的警告 主要是在TP框架中 ...

  9. 进程管理工具Supervisor(二)Events

    supervisor可以当做一个简单的进程启动.重启.控制工具使用,也可以作为一个进程监控框架使用,作为后者,需要使用supervisor的Events机制. Event Listeners supe ...

  10. exports与module.exports,export与export default 之间的关系和区别

    首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个 ...