关于控制台输入年月,显示该月日历的问题分析
时间:2020-05-18
本文章向大家介绍关于控制台输入年月,显示该月日历的问题分析,主要包括关于控制台输入年月,显示该月日历的问题分析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
以2020年5月为例,输出日历如下
简单的思路的分析:
该月有多少天,第一天是星期几;
该年是否为闰年;
因为1990年1月1号为周一,通过输入日期距离它的天数利用余数可以知道当月第一天为周几。
利用代码进行分析
首先导包与控制台的输入
再判断该年是不是闰年,并判断每月的天数
计算从1990年1月1号到该年1月1号的天数和,再计算该年1月1号到本月的天数,将天数和相加;
判断当前月的第一天是周几,可以利用余数来解决
最后输出当前年月的日历,对于在当月第一天之前的用空格代替
完整的代码如下:
package part;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//控制台输入年和月,输出该月的日历
Scanner input = new Scanner(System.in);
int year, month;
System.out.println("请输入年份:");
year = input.nextInt();
System.out.println("请输入月份:");
month = input.nextInt();
//判断该年是不是闰年,及确定每月有多少天
boolean isleap = false;
if((year%4 == 0 && year%100!= 0) || (year%400 == 0)){
isleap = true;
}else{
isleap = false;
}
int monthDays = 0;
switch (month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12: // 大月份
monthDays = 31;
break;
case 4: case 6: case 9: case 11: // 小月份
monthDays = 30;
break; // 2月份
default:
monthDays = isleap? 29:28;
break;
}
//因为1990年一月一号为星期一,按照年份差距计算天数,月份距离本年1月1日有多少天,两部分求和
int yearsum = 0;
int monthsum = 0;
int sum = 0;
// 计算年份相差的天数,当为闰年则为366,否则为365天
for (int i = 1990; i<year;i++){
if ((i%4 == 0 && i%100 != 0) || (i%400 == 0)){
yearsum += 366;
}else{
yearsum += 365;
}
}
// 计算月份距离本年1月1日的天数
for (int i = 1; i < month; i++){
switch (i){
// 大月份
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
monthsum+= 31;
break;
// 小月份
case 4: case 6: case 9: case 11:
monthsum += 30;
break;
// 2月份
default:
monthsum += isleap? 29:28;
break;
}
}
// 两部分之和即相距天数
sum =yearsum + monthsum;
//计算当前月第一天是周几 已知1990年1月1日是周一,根据上一步计算的时间距离求
int week = (sum%7) + 1; // 总天数%7 + 1 除掉所有整星期数后的数字则为星期几
//打印当前月日历
System.out.println("日\t一\t二\t三\t四\t五\t六");
// 打印可能的空白
for (int i = 0;i<week;i++){ //将空白赋值在week前面
System.out.print("\t");
}
// 打印日历
for (int i = 1;i<=monthDays;i++){
System.out.print(i + "\t");
if ((i+week)%7 == 0){
System.out.println();
}
}
System.out.println();
}
}
原文地址:https://www.cnblogs.com/afeiiii/p/12910872.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hibernate入门篇(三)——编写第一个Hibernate例子
- RabbitMQ与Kafka选型对比
- Hibernate进阶篇(三)——transaction简介
- Elastic search N-gram tokenizer
- java.io.IOException: com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 110
- io.protostuff.runtime.RuntimeUnsafeFieldFactory cannot have the same number
- dubbo 调用报Null 空指针 ,可能并不是真正的空指针
- Hibernate单表操作(四)——组件属性
- Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h
- Groovy小记it关键字和IDE报错
- 05 . Jenkins定制主题和设置项目构建信息输出颜色
- 腾讯云物联网平台使用报告
- 01 . PostgreSQL简介部署
- 01 . Git常用命令及方法和分支管理
- 记一次公司mssql server密码频繁被改的事件