package learnExercise;

 import java.util.Scanner;

 public class PrintCalender {

     /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in); System.out.print("Enter full year (e.g.,2001): ");
int year=input.nextInt(); System.out.print("Enter month as number between 1 and 12: ");
int month=input.nextInt(); printMonth(year,month); } private static void printMonth(int year, int month) {
// TODO Auto-generated method stub
printMonthTitle(year, month);
printMonthBody(year, month);
} public static void printMonthTitle(int year, int month){
System.out.println(" "+getMonthName(month)+" "+year);
System.out.println("-------------------------");
System.out.println(" Sun Mont Tue Wed Thu Fri Sat"); } //打印月份主体
public static void printMonthBody(int year,int month){
int startDay=getStartDay(year, month);
int numberOfDaysInMonth=getNumberOfDaysInMonth(year, month);
for(int i=0;i<startDay;i++)
System.out.print(" ");
for(int i=1;i<=numberOfDaysInMonth;i++){
System.out.printf("%4d",i);
if((i+startDay)%7==0)
System.out.println();
}
System.out.println();
} public static String getMonthName(int month){
String monthName="";
switch(month){
case 1: monthName="January";break;
case 2: monthName="February";break;
case 3: monthName="March";break;
case 4: monthName="April";break;
case 5: monthName="May";break;
case 6: monthName="June";break;
case 7: monthName="July";break;
case 8: monthName="August";break;
case 9: monthName="September";break;
case 10: monthName="October";break;
case 11: monthName="Nobember";break;
case 12: monthName="December";break;
}
return monthName;
}
//获取指定月份的第一天是周几
public static int getStartDay(int year, int month){
final int START_DAY_FOR_JAN_1_1800=8;
int totalNumberOfDays=getTotalNumberOfDays(year,month); return (totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7;
}
//返回总共的天数,从1800年1月1日开始计算,直到指定月份1日的前一天
public static int getTotalNumberOfDays(int year,int month){
int total=0;
for(int i=1800;i<year;i++)
if(isLeapYear(i))
total=total+366;
else
total=total+365; for(int i=1;i<month;i++)
total=total+getNumberOfDaysInMonth(year,i); return total;
} //返回指定月份的天数
public static int getNumberOfDaysInMonth(int year,int month){
int result=0;
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
result=31;
break;
case 4:
case 6:
case 9:
case 11:
result=30;
break;
case 2:
result=isLeapYear(year)?29:28;
break;
}
return result;
} //判断是否为闰年
public static boolean isLeapYear(int year){
return (year%400==0)||(year%4==0&&year%100!=0);
} }

方法抽象将程序模块化为整齐、层次分明的形式。将程序由简洁的方法构成的集合,比其他方式更容易编写、调试、维护和修改。

编写大型程序时,可以使用自顶向下或自底向上的方法,不要一次性地编写整个程序。

JAVA 打印指定月份日历的更多相关文章

  1. java获取指定月份有几个星期x,获取指定月份跨了多少个星期

    例如获取2020年5月一共有多少个星期二,一共跨了多少个星期 public class MainTest { public static void main(String[] args) throws ...

  2. java 查询指定月份的工作日(不包括法定节假日)

    /** * 日期工具类 用于获取指定月份的工作日(除去周末和法定节假日) */ public class DateUtils { public static void main(String[] ar ...

  3. java编程基础篇-------> 从键盘输入一位整数,代表月份,编程判断指定月份属于一年中的哪个季度。如果是 12 月、1 月、2 月,就属于冬季。

    从键盘输入一位整数,代表月份,编程判断指定月份属于一年中的哪个季度.如果是 12月.1 月.2 月,就属于冬季:如果是 3 月.4 月.5 月,就属于春季:如果是 6 月.7 月.8 月,就属于夏季: ...

  4. (PASS)java中打印当月的日历的每一天

      package test; import java.time.DayOfWeek; import java.time.LocalDate; /** * * @ClassName: Calendar ...

  5. Java中Calendar(日历)相关API举例

    Java中Calendar(日历)相关API举例,实现功能:输入一个年份和月份打印出这个月的日历. package calendarPrint; import java.util.Calendar; ...

  6. Java打印

    Java打印 import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Gra ...

  7. JavaScript 计算指定月份有多少天

    用 js 画工作日历的时候,需要用 js 计算指定月份一共有多少天 在网上找了些方法,都比较繁琐,后来灵机一动,想到一个偷懒的办法,分享一下 一.原理分析 要想得到某月有多少天,只需要获取到当月最后一 ...

  8. Java 打印程序设计实例

    3.1 打印文本 3.1.1 应用场景 假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印 54 行,如何实现呢? 3.1.2 解决方法 基本思路如下:首 ...

  9. PHP获取指定月份的第一天开始和最后一天结束的时间戳函数

    <?php /** * 获取指定月份的第一天开始和最后一天结束的时间戳 * * @param int $y 年份 $m 月份 * @return array(本月开始时间,本月结束时间) */ ...

随机推荐

  1. [Js]评分星星

    效果: 鼠标移到星星上,这颗星星及之前的全亮,提示文字出现,根绝星星数量显示不同文字,移出灭掉,文字消失 思路: 1.定义一个数组,来存放不同的文字 2.存放星星的索引值(要在i定义赋值后,即在for ...

  2. Unity3d之MonoBehaviour的可重写函数整理

    最近在学习Unity3d的知识.虽然有很多资料都有记录了,可是我为了以后自己复习的时候方便就记录下来吧!下面的这些函数在Unity3d程序开发中具有很重要的作用. Update 当MonoBehavi ...

  3. Countries in War (POJ 3114) Tarjan缩点+最短路

    题目大意: 在一个有向图中,每两点间通信需要一定的时间,但同一个强连通分量里传递信息不用时间,给两点u,v求他们最小的通信时间.   解题过程: 1.首先把强连通分量缩点,然后遍历每一条边来更新两个强 ...

  4. 矩阵(matrix)

    我们定义一个矩阵的权值为这个矩阵四个角上的数值的最小值.现在小M有一个矩阵,他想在这个矩阵中寻找到一个权值最大的子矩阵,请你告诉他这个最大权值.(距形规模最大为2000*2000) 比赛 看到第二题那 ...

  5. ASP.NET MVC过滤器(一)

    MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等 ...

  6. python 字典排序 关于sort()、reversed()、sorted()

    一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...

  7. 继承自NSObject的类不能用CGRect

    我用的是Xcode6.2. 系统默认没有pch文件. 所以没有自动导入UIKit包. 我在继承NSObject类里也不能用CGRect或者UI开头的控件,原因也是Xcode6.2以后版本 缺少UIKi ...

  8. SrcollView分页加载数据(MainActivity)

    package com.baidu.mylistscroll; import java.util.ArrayList;import java.util.List; import com.baidu.a ...

  9. Repeater控件的分页效果

    <webdiyer:AspNetPager ID="AspNetPager1" runat="server" HorizontalAlign=" ...

  10. Python闭包实现的计数器

    #!/usr/bin/env python #coding=utf-8 def generate_counter(): CNT = [0] def add_one(): CNT[0] = CNT[0] ...