Program:打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一),

要  求:

  (1)编写一个方法判断闰年;

    (2)编写一个方法判断某年某月有多少天;

    (3)编写一个方法计算某年某月前距离1900年1月1日的总天数;(4)编写一个输出某年某月日历的方法;

    (5)编写一个测试方法。

Description:该项目由多个类实现,最后类为main方法的调用。代码如下:

  1 /*
2 *Description:定义工具类
3 *
4 * */
5
6 package tools;
7
8 import java.util.Scanner;
9
10 public class Operate {
11
12 //定义方法,判断一个年是否是闰年
13 public static boolean ifLeapyear(int year) {
14
15 if( year % 400 == 0 ) { //能被400整除
16
17 return true;
18 }else if( year % 100 != 0 && year % 4 == 0 ) { //不是100倍数,但是能被4整除
19
20 return true;
21 }else {
22
23 return false;
24 }
25 }
26
27 //判断某年某月有多少天
28 public static int getDays(String yearMonth) {
29
30 String array[] = yearMonth.split("-");
31 int year = Integer.parseInt( array[0] );
32 int month = Integer.parseInt( array[1] );
33 int monthOne[] = {31,29,31,30,31,30,31,31,30,31,30,31};
34 int monthTwo[] = {31,28,31,30,31,30,31,31,30,31,30,31};
35
36 if( Operate.ifLeapyear(year) ) {
37 return monthOne[month-1];
38 }
39 return monthTwo[month-1];
40 }
41
42 //接收用户的输入
43 public static String getInput() {
44
45 Scanner scan = new Scanner(System.in);
46 String yearMonth = "";
47 System.out.println( "请输入年月,中间用'-'分开:" );
48 yearMonth = scan.next();
49
50 return yearMonth;
51 }
52
53 //验证用户输入数据的合法性
54 public static boolean validate(String yearMonth) {
55
56 if( yearMonth.matches( "\\d{4}\\W\\d{1,2}" ) ) { //进行正则匹配
57
58 String str[] = yearMonth.split("-");
59
60 if( Integer.parseInt( str[0] ) < 1900 ) { //年份小于1990
61 return true;
62 }
63
64 //月份不在1-12月之间
65 if( Integer.parseInt(str[1]) < 1 || Integer.parseInt( str[1] ) > 12 ) {
66
67 return true;
68 }
69
70 return false;
71
72 }else {
73 return true;
74 }
75 }
76
77 //计算某年某月距离1990年有多少天
78 public static int getAllDays(int year,int month,int[] monthOne,int[] monthTwo) {
79 int count = 0;
80 for( int i = 1900;i < year; i++ ) {
81
82 if( Operate.ifLeapyear(i) ) {
83 count += 366;
84 }else {
85
86 count += 365;
87 }
88 }
89
90 for( int i = 0; i < month - 1; i++ ) {
91
92 if( Operate.ifLeapyear(year) ) {
93
94 count += monthOne[i];
95 }else {
96
97 count += monthTwo[i];
98 }
99 }
100 return count;
101 }
102
103
104 //打印日历
105 public static void printDate(String yearMonth) {
106 String array[] = yearMonth.split("-");
107 int year = Integer.parseInt( array[0] );
108 int month = Integer.parseInt( array[1] );
109 int monthOne[] = {31,29,31,30,31,30,31,31,30,31,30,31}; //闰年每个月的天数
110 int monthTwo[] = {31,28,31,30,31,30,31,31,30,31,30,31}; //平年每个月的天数
111 int count = 0;
112
113 count = Operate.getAllDays(year, month, monthOne, monthTwo); //得到天数
114
115 int remainDays = count % 7; //除以7。看看剩余的天数
116 int monthDays = Operate.getDays(yearMonth); //得到目标月份的天数
117 String[] days = new String[remainDays + monthDays + 2]; //开辟一个String数组,存放打印的内容
118
119 int k = 1;
120 for(int i = 0; i < days.length; i++) { //为数组赋值
121
122 if( i < remainDays + 1 ) {
123 days[i] = " ";
124 }else {
125 days[i] = k + "";
126 k++;
127 }
128 }
129
130 //打印出rili
131 System.out.println( "---------------------" + year + "年" + month + "月" + "---------------------" );
132 System.out.println( "日\t一\t二\t三\t四\t五\t六" );
133 for( int i = 0; i < days.length; i++ ) {
134
135 System.out.print(days[i] + "\t");
136 if( (i + 1) % 7 == 0 ) { //每七天换行
137 System.out.println();
138 }
139 }
140 }
141
142 }
 1 /*
2 * Description:打印某年某月的日历
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-09-24
7 *
8 * */
9
10 package main;
11 import tools.Operate;
12
13
14 public class DemoTwo2 {
15
16 public static void main(String args[]) {
17
18 String input = ""; //接收用户输入的值
19 boolean flag = true;
20 while( flag ) { //判断用户输入的日期是否合法
21 input = Operate.getInput();
22 if( Operate.validate(input) ) { //调用方法检测
23
24 System.out.println( "输入日期格式错误,请重新输入:" );
25 }else {
26
27 flag = false;
28 }
29 }
30
31 Operate.printDate(input); //打印rili
32 }
33 }

Java实验项目二——打印某年某月日历的更多相关文章

  1. Java实验项目二——小学生考试系统(简单四则运算)

    Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...

  2. Java实验项目二——二维数组实现九九乘法表

    Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法 ...

  3. Java实验项目二——猜数游戏

    1 /* 2 * Description:定义比较类,实现两个数的比较 3 * 4 * */ 5 6 7 package compare; 8 9 import dao.Operate; 10 11 ...

  4. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  5. d017: 打印某年某月有几天

    内容: 打印某年某月有几天 输入说明: 一行两个整数,前面是年份 后面是月份 输出说明: 一个整数 输入样例:   2009 6 输出样例 : 30 #include <stdio.h> ...

  6. 20145203盖泽双:Java实验报告二

    Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...

  7. Java实验项目三——平面图形和立体图形抽象类

    Program:按照下面要求完成类的设计 (1)设计一个平面图形抽象类和一个立体图形抽象类,提供该类对象公共的方法和属性. (2)修改项目三中第2题中所设计的球类.圆柱类,圆锥类.矩形类.三角形类.圆 ...

  8. java实验项目报告

            JAVA课程项目报告   题目:利用java实现一个时钟的小程序 姓名:王国梁 班级:计科13-2 学号:201303011200         利用JAVA实现一个时钟的小程序 1 ...

  9. java实验报告二

    一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验步骤 (一)单元 ...

随机推荐

  1. 程序"三高"解决方案

    0. 程序三高 1. 缓存 2. 预处理和延后处理 3. 池化 3.1 内存池 3.2 线程池 3.3 连接池 4. 异步(回调) 5. 消息队列 5.1 服务解耦 5.2 异步处理 5.3 流量削峰 ...

  2. 大对象数据LOB的应用(Day_10)

    当你有永不放弃的精神,全力以赴的态度,你会惊叹自己也能创造奇迹! LOB数据类型概述 由于于无结构的数据往往都是大型的,存储量非常大,而LOB(large object)类型主要用来支持无结构的大型数 ...

  3. Java基础语法,常用知识复习

    1.开发环境搭建 1.1JDK.JRE.JVM.的关系 JDK = JRE + 开发工具集(例如javac编译工具集等) JRE = JVM + Java SE 标准类库 2.基本语法 2.1.jav ...

  4. Archlinux zsh终端美化 powerlevel10k配置

    环境 Arch Linux + KDE Plasma 安装zsh yay -S zsh 更改默认终端 chsh -s /bin/zsh 安装oh-my-zsh-git archlinuxcn源有打好的 ...

  5. SSTI漏洞-fastapi

    0x00 原理   SSTI漏洞全称服务器模板注入漏洞,服务器模板接收了用户输入的恶意代码,未经过滤便在服务端执行并通过渲染模板返回给用户,使得用户可以通过构造恶意代码在服务端执行命令. 0x01 c ...

  6. return true 和 return false 和 return

    1.return false:相当于终止符,干了3件事,阻止默认行为,取消事件冒泡,以及停止回调执行立即返回: 2.return:停止回调执行立即返回: 3.return true:相当于执行符,继续 ...

  7. Paddle Inference推理部署

    Paddle Inference推理部署 飞桨(PaddlePaddle)是集深度学习核心框架.工具组件和服务平台为一体的技术先进.功能完备的开源深度学习平台,已被中国企业广泛使用,深度契合企业应用需 ...

  8. AICompiler动态shape编译框架

    AICompiler动态shape编译框架 移动互联网的兴起,不仅产生了海量数据,也对人机交互有了新的定义.企业如何动态处理不同规格图片数据,如何更灵活处理不同长度的对话语料等等,提升企业运营效率,争 ...

  9. 英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器

    英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器 一直以来,每一代英特尔 i5 系列都是很多游戏玩家主要的选购对象,它和任何一款显卡似乎都能够很好的搭配起来.可凡事都有美中不足的地方,比如 ...

  10. 使用JavaScript获取url(request)中的参数

    这次是使用JavaScript来获取url(request)中的参数 在日常页面编写的过程中为了方便操作在<script>中通过使用window.location.href="要 ...