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. 了解设计模式 二.实验步骤 (一)单元 ...
随机推荐
- 9.7 top:实时显示系统中各个进程的资源占用状况
top命令 用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况.该命令可以按照CPU的使用.内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式 ...
- Flink-cdc实时读postgresql
由于公司业务需要,需要实时同步pgsql数据,我们选择使用flink-cdc方式进行 架构图: 前提步骤: 1,更改配置文件postgresql.conf # 更改wal日志方式为logicalwal ...
- MYSQL导入/迁移后事件不执行
mysql迁移后事件不执行 查看数据库是否开启事件支持 mysql> show variables like 'event_scheduler'; +-----------------+---- ...
- SystemVerilog MCDF验证结构
MCDF的设计和验证花费的时间:(工作中假设的时间) design cycle time ==10days how about 验证?verify? 模块越往上(大')验证花费的时间越来越大,但是 ...
- win7 32位系统 安装node.js最新版本遇到的问题
win7 32位是安装不了10.0以上版本的node.js的 ,因为10.0以上版本的node.js已经不对win7 32位的电脑进行维护更新了,如果你的电脑是win7 32位系统的话,只能下载安 ...
- RMAN-20208: UNTIL CHANGE is before RESETLOGS change
执行recover操作时: RMAN> recover database; Starting recover at 28-NOV-19 using channel ORA_DISK_1 ...
- MLIR中间表示和编译器框架
MLIR中间表示和编译器框架 TensorFlow生态系统包含许多在软件和硬件堆栈的多个级别上运行的编译器和优化器.作为TensorFlow的日常用户,使用不同类型的硬件(GPU,TPU,移动设备)时 ...
- 绘制log()函数图像,并在图上标注选定的两个点
绘制log()函数图像,并在图上标注选定的两个点 import math import matplotlib.pyplot as plt if __name__ == '__main__': x = ...
- conn / as sysdba连接不上
问题: SQL> conn / as sysdbaERROR:ORA-09817: Write to audit file failed.Linux-x86_64 Error: 28: No s ...
- VBS脚本编程(2)——运算符
算数运算符 用于执行数学计算的运算符. 1.加法运算符( + ) 计算两个数之和. 2.减法运算符( - ) 计算两个数值的差或表示数值表达式的负值. 3.乘法运算符(*) 计算两个数之积. 4.除法 ...