输入年份和月份,输出当年当月的日历

输入输出如下:


主要思路:
1、判断平年闰年并判断2月的天数
2、判断星期几
3、日期与星期的对应,输出

代码如下:

import java.util.Scanner;public class RiLi {public static void main(String[] args) {int sumDay=0;Scanner in=new Scanner(System.in);System.out.print("请输入年份:");int year=in.nextInt();System.out.print("请输入月份:");int month=in.nextInt();System.out.println(year+"年"+month+"月"+"日历如下:");for(int i=1900;i<year;i++) {if((i%4==0)&&(i%100!=0)||(i%400==0)) {sumDay+=366;}else {sumDay+=365;}}for(int j=1;j<month;j++) {if(j==4||j==6||j==9||j==11) {sumDay+=30;}else if(j==2) {if((year%4==0)&&(year%100!=0)||(year%400==0)) {sumDay+=29;}else {sumDay+=28;}}else {sumDay+=31;}}/*以上代码计算1900年1月1号到输入的年月的总天数,如输入2018和8,则计算1900.1.1-2018.7.31的天数*/int xingQi=(sumDay+1)%7;/*xingQi用来计算输入的月份1号星期几*/int everydayXingQi=sumDay+1;int monthDay;//用来接收每月几天System.out.println("日\t一\t二\t三\t四\t五\t六");if(month==4||month==6||month==9||month==11) {monthDay=30;}else if(month==2) {if((year%4==0)&&(year%100!=0)||(year%400==0)) {monthDay=29;}else {monthDay=28;}}else {monthDay=31;}for(int i=0;i<xingQi;i++) {    //输出每月1号前的空格System.out.print("\t");}for(int i=1;i<=monthDay;i++) {  //输出每个月的天数和控制换行if(everydayXingQi%7==6) {System.out.print(i+"\n");}else {System.out.print(i+"\t");}everydayXingQi++;}}
}

下面是优化后的代码,更简洁:

import java.io.*;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
public class Test {public static void main(String[] args) throws IOException {Scanner in = new Scanner(System.in);System.out.print("请输入年份:");int year = in.nextInt();System.out.print("请输入月份:");int month = in.nextInt();System.out.println(year + "年" + month + "月" + "日历如下:");LocalDate endDate = LocalDate.of(year, month, 1);//设置输入的日期LocalDate startDate = LocalDate.of(1900, 1, 1);long sumDay = startDate.until(endDate, ChronoUnit.DAYS);//总相差的天数:3657/*以上代码计算1900年1月1号到输入的年月的总天数,如输入2018和8,则计算1900.1.1-2018.7.31的天数*/long xingQi = (sumDay + 1) % 7; //xingQi用来计算输入的月份1号星期几long everydayXingQi = sumDay + 1;int monthDay = endDate.lengthOfMonth();//用来接收输入的月份有几天System.out.println("日\t一\t二\t三\t四\t五\t六");for (int i = 0; i < xingQi; i++) {    //输出每月1号前的空格System.out.print("\t");}for (int i = 1; i <= monthDay; i++) {  //输出每个月的天数和控制换行if (everydayXingQi % 7 == 6) {System.out.print(i + "\n");} else {System.out.print(i + "\t");}everydayXingQi++;}}
}

java制作简单日历相关推荐

  1. Java制作简单小画板

    Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类. 1.Drawpad类,包括画板,画板功能设计,保存图片等 package Java课程设计; ...

  2. Java制作简单的单选和多选测试题

    Java制作简单的单选和多选测试题 题目: 定义考题类(Question)及其子类 完成考题类(Question),单选题(SingleChoice)和多选题(MultiChoice)是其子类 要求: ...

  3. html日历页面节假日_js+html制作简单日历的方法

    这篇文章主要为大家详细介绍了js html制作简单日历的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 新手一枚,不会写什么高大上的博文,一些平时做的小练习,献丑 ...

  4. 用html制作简单日历,CCS小技巧,如何使用CSS Grid制作简单的日历,简单有趣

    原标题:CCS小技巧,如何使用CSS Grid制作简单的日历,简单有趣 日历是人类文明的重要工具之一.然后可以记住许多重要事件,并从事件的确切日期追溯到真相. 在本文中,我们将学习如何利用CSS Gr ...

  5. java 制作简易日历_Java制作简单日历

    1.用for循环.switch 以1990.01.01作为参考 public class Demo_9 { public static void main(String[] args) { Scann ...

  6. java 制作简易日历_如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

  7. 用Java制作简单的计算器

    目录 界面的设计: 事件的响应: 计算: 详细代码如下: 总结: 要制作一个简单的计算器,首先就是对于界面的设计,然后就是其功能的实现. 对于事件的实现大概就分下面几个步骤. 确定事件源和监听源 实现 ...

  8. 用Java制作简单的记事本

    目录 前言 主界面设计 功能实现 打开 另存为 保存 查找 替换 成员变量 其他方法 警告弹窗 不移动光标更新文本框内容 源代码 总结 转载请注明出处,尊重作者劳动成果. 前言 考完试想写敲一下代码就 ...

  9. atm java代码_用JAVA制作简单的ATM的代码 求教

    展开全部 ok,稍等 呵呵,已经给你拆分成了两个独立的类了. 我再吧注释加起吧. 哪儿e68a8462616964757a686964616f31333262363734不清楚的可以给我留言嘛,刚开始 ...

最新文章

  1. 一览六月最热的5篇AI技术论文
  2. BOOST_TEST_FOREACH宏相关的测试程序
  3. 监督学习无监督学习_无监督学习简介
  4. 前端学习(100):float注意点整理1
  5. Twaver-HTML5基础学习(26)背景
  6. SpringBoot基础-Environment解析
  7. 拳皇世界6月13服务器维护,拳皇世界闪退怎么办 对症下药马上好
  8. 《灰故事》:他用曲笔描绘着我们
  9. ROS到ROS2的多节点组合运行
  10. dau、mau、pcu、dnu、wau、acu、uv的意思是什么?怎么分析?
  11. Sdwan关于工业控制组网
  12. Apache Spark 3.0 预览版正式发布,多项重大功能发布
  13. Android6.0新特性
  14. 商派BBC系统——商家管理管理中心的菜单配置
  15. springboot首次整合Mongodb及可视化客户端Robo3T(附Mongodb和Robo3T安装包)
  16. 威力导演-CyberLink PowerDirector Ultimate 17 永久启用 安装教程
  17. Android仿探探卡片式滑动效果实现
  18. 英利确认银监会力推公司债务重组 正在接洽实力战投
  19. DentalMonitoring扩张至日本市场
  20. android悬浮按钮功能实现,Android中实现悬浮按钮

热门文章

  1. 读书笔记||类和动态内存分配
  2. EIGRP(含汇总,非等价负载均衡,默认等实验)
  3. c++双人战争小游戏
  4. 从费斯汀格法则看,永远不要对自己做的20件事
  5. 2023年完美解决:windows 11/win 11使用经典右键菜单(win10版右键菜单)
  6. persevere的用法_persevere是什么意思_persevere怎么读_persevere翻译_用法_发音_词组_同反义词_坚忍_熬住-新东方在线英语词典...
  7. (王道考研计算机网络)第三章数据链路层-第六节2:以太网
  8. 2021年第11月月赛题解akoj
  9. 【Vista之家编译】Windows Vista兼容软件列表大全!!
  10. 挂载(具名挂载、匿名挂载)