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. Windows获取文件大小

    Windows最初的设计允许我们处理非常大的文件,所以最初的设计者选用64位值来表示文件大小.但是我们在日常处理过程中文件大小一般不会超过4GB.故Windows提供了两个联合类型的数据结构表示文件大 ...

  2. http错误和异常处理,认证和代理设置

    http错误: import urllib.requestreq = urllib.request.Request('http://www.python.org/fish.html')try:urll ...

  3. Grunt设置

    Grunt完成对LESS实时编译. 安装 安装grunt需要先安装node.js. 之后需要借助npm来安装grunt-cli,在cmd中npm install -g grunt-cli.(测试gru ...

  4. HDU 1542 线段树+扫描线+离散化

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. 基于MVC模式的应用框架之struts

    1.struts开发步骤 引入struts的jar包: 在web.xml中引入struts的核心功能,配置struts核心过滤器:(如果项目中用到了其他过滤器,要放在struts过滤器之前,否则会失效 ...

  6. POJ 1739

    楼教主男人八题之一... 题目大意: 求从左下角经过所有非障碍点一次到达右下角的方案数 这里不是求回路,但是我们可以考虑,在最下面一行再增加一行,那么就可以当做求此时左下角到右下角的回路总数,那么就转 ...

  7. HDU 2255 二分图最佳匹配 模板题

    题目大意: 给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益 抄了个别人的KM模板,就这样了... #include <cstdio> #incl ...

  8. UITableViewCell Property “icon” cannot be found in forward class object “DJWeiBo”

    UITableViewCell 自定义表格 实体属性不显示错误 Property “icon” cannot be found in forward class object “DJWeiBo”引入实 ...

  9. poj 1797 Heavy Transportation(最短路径Dijkdtra)

    Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 26968   Accepted: ...

  10. SSH(1)

    假定服务器ip为192.168.1.139,ssh服务的端口号为22,服务器上有个用户为pi,两边都是ubuntu 一,Init *安装 如果是想用ssh从本机登陆别的机器,只需要安装openssh- ...