Java实验项目二——打印某年某月日历
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实验项目二——打印某年某月日历的更多相关文章
- Java实验项目二——小学生考试系统(简单四则运算)
Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...
- Java实验项目二——二维数组实现九九乘法表
Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法 ...
- Java实验项目二——猜数游戏
1 /* 2 * Description:定义比较类,实现两个数的比较 3 * 4 * */ 5 6 7 package compare; 8 9 import dao.Operate; 10 11 ...
- Java实验报告二:Java面向对象程序设计
Java实验报告二:Java面向对象程序设计 ...
- d017: 打印某年某月有几天
内容: 打印某年某月有几天 输入说明: 一行两个整数,前面是年份 后面是月份 输出说明: 一个整数 输入样例: 2009 6 输出样例 : 30 #include <stdio.h> ...
- 20145203盖泽双:Java实验报告二
Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...
- Java实验项目三——平面图形和立体图形抽象类
Program:按照下面要求完成类的设计 (1)设计一个平面图形抽象类和一个立体图形抽象类,提供该类对象公共的方法和属性. (2)修改项目三中第2题中所设计的球类.圆柱类,圆锥类.矩形类.三角形类.圆 ...
- java实验项目报告
JAVA课程项目报告 题目:利用java实现一个时钟的小程序 姓名:王国梁 班级:计科13-2 学号:201303011200 利用JAVA实现一个时钟的小程序 1 ...
- java实验报告二
一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验步骤 (一)单元 ...
随机推荐
- Mac 使用 Parallels Desktop 虚拟机安装 win10 教程
Parallels Desktop 介绍 Parallels Desktop 是一款运行在 Mac 电脑上的极为优秀的虚拟机软件,用户可以在 Mac OS X下非常方便运行 Windows.Linux ...
- 6.3-4 zip、unzip
zip:打包和压缩文件 zip压缩格式是Windows与Linux等多平台通用的压缩格式.和gzip命令相比,zip命令压缩文件不仅不会删除源文件,而且还可以压缩目录. zip命令的参数选 ...
- NLP文本分类
引言 其实最近挺纠结的,有一点点焦虑,因为自己一直都期望往自然语言处理的方向发展,梦想成为一名NLP算法工程师,也正是我喜欢的事,而不是为了生存而工作.我觉得这也是我这辈子为数不多的剩下的可以自己去追 ...
- Django中数据库操作相关的错误
问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...
- [leetcode] 72. 编辑距离(二维动态规划)
72. 编辑距离 再次验证leetcode的评判机有问题啊!同样的代码,第一次提交超时,第二次提交就通过了! 此题用动态规划解决. 这题一开始还真难到我了,琢磨半天没有思路.于是乎去了网上喵了下题解看 ...
- Paddle Inference推理部署
Paddle Inference推理部署 飞桨(PaddlePaddle)是集深度学习核心框架.工具组件和服务平台为一体的技术先进.功能完备的开源深度学习平台,已被中国企业广泛使用,深度契合企业应用需 ...
- python+selenium基础篇,网页截图
代码如下: from selenium import webdriver dr=webdriver.Firefox() dr.get("https://www.baidu.com" ...
- 关于switch语句的使用方法---正在苦学java代码的新手之菜鸟日记
输入月份与年份,判断所输入的月份有多少天. switch支持和不支持的类型 支持的类型 int 类型 short 类型 byte 类型 char 类型 enum (枚举)类型 (java5.0 之后支 ...
- MySQL基础练习
表的一些基本操作 1.导入sql文件 source + 文件位置 2.查询某列的数据 select col1, col2, col3 from table 3.查询所有数据 select * from ...
- 【VBA】读取另一个excel工作簿中的内容
后台打开工作簿读取内容源码: Sub subOpenWorkbook() Dim datebase As String datebase = "... ....xlsx" Appl ...