Java之万年历
@
二、Java之万年历
2.1 要求
- 输入年份;
- 输入月份;
- 输出某年某月的日历。
2.2 思路
- 实现从控制台接收年和月,判断是否是闰年(判断是否是闰年:能被4整除但不能被100整除;或者能被400整除);
- 计算输入月份的天数;
- 计算该月第一天是星期几;
3.1 计算输入年份距离1900年1月1日的天数;
3.2 计算输入月份之前的天数(从当年年初开始);
3.3 将以上两组数据进行求和;
3.4 已知该月之前的天数,计算输入月份的第一天是星期几(从1900年1月1日(星期一)开始推算: 星期几 = 1 + 天数差 % 7 )。 - 按格式输出该月日历 。
2.3 源代码
import java.util.Scanner;
public class index {
//每个月的天数
public static int monthday(int month, int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
int[] day = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return day[month];
} else {
int[] day = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return day[month];
}
}
//月份总天数
public static int monthdays(int month, int year) {
int totaldays = 0;
for (int i = 1; i < month; i++) {
totaldays = totaldays + monthday(i, year);
}
return totaldays;
}
//距离1900年的年份总天数
public static int yeardays(int year){
int yeardays = 0;
for (int i = 1900;i<year;i++){
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
yeardays = yeardays+366;
} else {
yeardays = yeardays+365;
}
}
System.out.println(year+"年距离1900年的总天数"+yeardays);
return yeardays;
}
//输出日历
public static void printCalendar(int month,int year){
int totaldays = 0;
if (year > 0) {
if (month > 0 && month < 13) {
//距离1900年1月1日总天数
totaldays = monthdays(month,year)+yeardays(year);
System.out.println(year+"年"+month+"月1日距离1900年的总天数:"+totaldays);
System.out.println("\n**********"+year+"年"+month+"月的日历为**********");
System.out.println("一\t二\t三\t四\t五\t六\t日\t");
int week = 1+totaldays%7;
//根据1日为周几输出空格
for(int i=1;i<week;i++){
System.out.print(" \t");
}
//输入具体日期
for(int i=1;i<=monthday(month,year);i++){
System.out.print(i+"\t");
if(week==7){
week = 1;//重置为星期一
System.out.println();
}else{
week++;
}
}
} else {
System.out.println("输入的月份不合法!");
}
} else {
System.out.println("输入的年份不合法!");
}
}
//主函数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("***********************欢迎使用万年历**************************");
System.out.println("*********请选择你需要进行的操作(输入进行操作之前的数字)**********");
System.out.println("********************1.查询某年某月的日历************************");
System.out.println("********************2.结束操作*********************************");
System.out.print("\n请选择你需要进行的操作:");
int a = scanner.nextInt();
for (int i=0;i>=0;i++) {
switch (a) {
case 1:
System.out.print("请选择年份:");
int year = scanner.nextInt();
System.out.print("请选择月份:");
int month = scanner.nextInt();
printCalendar(month, year);
System.out.print("\n请选择你需要进行的操作:");
a = scanner.nextInt();
break;
case 2:
System.out.println("退出程序成功!");
return;
}
}
}
}
2.4 结果截图
注意:我的周日是在最后一栏
Java之万年历的更多相关文章
- java 实现万年历
曾经初学java写万年历,都是採用主要的算法求出是否闰年闰月 计算公式例如以下 int year = 2014, month = 8, total = 0; if (month == 1 || mon ...
- java输出万年历
import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class M ...
- Java开发万年历
自己做出来的万年历: 以下代码: public class Test2 { public static void main(String[] args) { Scanner sc = new Sca ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 小JAVA大世界之万年历
import java.util.Scanner; public class Calendar { public static void main(String[] args) { // 万年历 in ...
- 算法,java代码实现打印万年历
万年历 以1900年1月1号星期一为时间原点 星期日 第一天 星期一 第二天 星期二 第三天 星期三 第四天 星期四 第五天 星期五 第六天 星期六 第七天 1.计算出当前日 ...
- Java流程控制练习--万年历
Java流程控制练习--万年历 标签: Java入坑之旅 0x01. 打印倒三角和正三角 public static void main(String[] args) { // TODO Auto-g ...
- 用java进行简单的万年历编写
import java.util.Scanner; public class PrintCalendarDemo1 { public static void main(String[] args) { ...
- java万年历
import java.util.Scanner; public class perpetualCalendar { public static void main(String[] args) { ...
随机推荐
- 浅析Redis基础数据结构
Redis是一种内存数据库,所以可以很方便的直接基于内存中的数据结构,对外提供众多的接口,而这些接口实际上就是对不同的数据结构进行操作的算法,首先redis本身是一种key-value的数据库,对于v ...
- bzoj2989 数列(KDTree)
bzoj2989 数列(KDTree) bzoj 该说不愧是咱,一个月才水一篇题解然后还水的一批 题目描述: 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和 ...
- 如何移植sqlite3到嵌入式平台
本人也时常看其他人的blog,搜索资料的目的是尽快解决当前的问题,例如如何移植一个ssh,尽快要明白所需的东西,方能移植完成. 移植sqlite3的步骤如下: 1. 到官方网站下载指定的源码包:htt ...
- 怎么得到InnoDB主键索引B+树的高度?
上面我们通过推断得出B+树的高度通常是1-3,下面我们从另外一个侧面证明这个结论.在InnoDB的表空间文件中,约定page number为3的代表主键索引的根页,而在根页偏移量为64的地方存放了该B ...
- vue自定义指令?
除核心指令之外的指令, 使用directive进行注册. 指令自定义钩子函数: bind, inserted, update, componentUpdated, unbind
- 面试问题之C++语言:如何避免内存泄漏?
转载于:https://www.php.cn/csharp-article-416104.html 1.不要手动管理内存,可以尝试在适用的情况下使用智能指针. 2.使用string而不是char*.s ...
- js获取元素本身相关值
Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置. getClientRects() 方法返回的一组矩形的集合, 即:是与该元素相关的CSS 边框集 ...
- Qt的.pro文件格式解析
Qt的.pro文件格式解析 在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下: 1.注释 .pro文件中注释采用#号,从"#&quo ...
- linux环境下搭建solr服务器--单机版
前提需要在安装好jdk和tomcat,本人用的是jdk1.8+tomcat8.5+solr4.10. 第一步:安装linux.jdk.tomcat.(这步都是比较简单的,就不多说了) 第二步:把sol ...
- IOS动态调试汇总-傻瓜版教程
参考博客: https://juejin.cn/post/6872764160640450574#heading-4 (断点后续指令) https://www.jianshu.com/p/67f08a ...