任务名称

某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休息日 是否周末,为此,请你开发一个程序,当孙工输入年及月,以日历方式显示对应月 份的休息日,用中括号进行标记.同时,统计出本月有几天休息,轮到周末休息有 几天.(注:首次休息日是 2020 年 2 月 2 日)。

代码及注释

代码1:数据处理部分

package com.java.task010301_002;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class FindDao {View view = new View();/*** 计算休息天数,并输出日期*/public void calculate() throws ParseException {//获取指定年月int year = view.getYear();int month = view.getMonth()-1;//类中月份范围0-11,用户输入1-12// 使用默认时区和语言环境获得一个日历Calendar calendar = Calendar.getInstance();//设置当前日历为用户输入的日期calendar.set(year,month,1);//获取本月最大天数----DAY_OF_MONTH:get和 set字段编号表示当月的日期。int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//判断本月第一天是星期几------DAY_OF_WEEK: get和set字段编号表示星期几int week = calendar.get(Calendar.DAY_OF_WEEK);//日历横头---星期显示view.weekView();//第一天是星期几,前面就留出多少空格,保证对齐for (int i=1;i<week;i++){System.out.printf("%-8s"," ");//printf输出格式----%-8s字符串,长度为8,左对齐}//本月休息天数int restDay = 0;//本月周末休息天数int restWeekDay = 0;//循环本月的每一天,判断是否是休息日,休息日是否是周末,并输出显示,休息日期用()圈出for (int i=1;i<=maxDay;i++){calendar.set(Calendar.DAY_OF_MONTH,i);//设置当前日历日期为i日//返回Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。Date date = calendar.getTime();//判断该天是否为休息日if (isRestDay(date)){System.out.printf("%-8s","("+calendar.get(Calendar.DAY_OF_MONTH)+")");//输出当前日期,并做出标记restDay++;//休息日变量增加//判断该休息日是否为周末if (calendar.get(Calendar.DAY_OF_WEEK)==6 || calendar.get(Calendar.DAY_OF_WEEK)==6){restWeekDay++;//周末休息天数增加}}else{System.out.printf("%-8s",i);//如果不是休息日,直接输入日期}//每周换行显示if (calendar.get(Calendar.DAY_OF_WEEK) == 7){System.out.println();}}System.out.println();System.out.println("本月休息天数有:"+restDay+"天");System.out.println("本月轮到周末休息天数有:"+restWeekDay+"天");}/*** 判断是否为休息日* @param date* @return* @throws ParseException*/public static boolean isRestDay(Date date) throws ParseException {//SimpleDateFormat是一个用于以区域设置敏感的方式格式化和解析日期的具体类。// 它允许格式化(日期→文本),解析(文本→日期)和规范化。SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//设置最开始的休息日日期Date startDate = format.parse("2020-02-02");//得到开始日期的毫秒数long startTime = startDate.getTime();//得到当前日历的毫秒数long dateTime = date.getTime();//两个毫秒数做差,算出天数int days = (int)((dateTime-startTime)/1000/60/60/24);//每三天休一天,四天为一个单位,第四天就是休息日,// 从2020-02-02开始,之前日期不算,所以毫秒数差不能为负数if (dateTime-startTime>=0 && days%4==0){return true;}return false;}
}

代码2:数据输出展示部分 (视图部分)

package com.java.task010301_002;import java.util.Scanner;public class View {Scanner input = new Scanner(System.in);//获取年份:public int getYear(){System.out.println("请输入年:");String inputYear = input.nextLine();int year = -1;try {year = Integer.parseInt(inputYear);}catch (NumberFormatException e){}if (year<1000 || year>10000){System.out.println("格式输入有误,请重新输入---");return getYear();}return year;}//获取月份public int getMonth(){System.out.println("请输入月份:");String inputMonth = input.nextLine();int month = -1;try {month = Integer.parseInt(inputMonth);} catch (NumberFormatException e) {}if (month<1 || month>13){System.out.println("格式输入有误,请重新输入---");return getMonth();}return month;}//是否继续查找public int proceedFind(){System.out.println("是否继续查找?1.继续 0.退出");String s = input.nextLine();int flag = -1;try {flag = Integer.parseInt(s);}catch (NumberFormatException e){}if (flag!=0 && flag!=1){System.out.println("格式输入有误,请重新输入---");return proceedFind();}return flag;}//日历横头---星期显示public void weekView(){System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");}
}

代码3:主函数调用部分

package com.java.task010301_002;import java.text.ParseException;public class MainTest {public static void main(String[] args) throws ParseException {FindDao findDao = new FindDao();View view = new View();while (true){System.out.println("-------欢迎来到工作日/休息日查询系统---------");findDao.calculate();//判断是否继续int proceed = view.proceedFind();if (proceed == 0){System.out.println("感谢使用!");break;}}}
}

运行结果展示

注意:题目要求从2020年2月2日开始,所以我们要首先验证一下,开始时间是否符合题意。因为本人出现过这种错误,所以在此小小提醒一下。

实现继续查找功能:

实现退出功能:

总结

对之前所学的知识点做一个小小的总结,希望各位大佬不吝赐教。

JAVA 知识----找到休息日训练任务相关推荐

  1. Java作业——找到休息日

    题目: 某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休息日是否周末.为此,你开发一个程序,当孙工输入年及月,以日历方式显示对应月份的休息日,用中括号进行标记.同时,统计出本月有几 ...

  2. Java习题-找到休息日

    1. 任务概述 1.1 任务详情 某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休息日是否周末,为此,请你开发一个程序,当孙工输入年及月,以日历方式显示对应月份的休息日,用中括号进 ...

  3. Java找到休息日问题

    Java找到休息日问题 核心知识 日历类:Calendar 时间类:SimpleDateFormat.Date 集合类:ArrayList 字符串类:StringBuilder(不安全的) 问题描述: ...

  4. 万字 Java 知识地图助你成为 Offer 收割机

    点击关注"码海" 右上角"设为星标"好文章送达比别人快 我相信这些读者或多或少都有一些 Java 基础,但由于看不到全貌,学了一段时间很容易迷失.所以我在寻思着 ...

  5. 技术实践:大规模知识图谱预训练及电商应用

    本文作者: 张文(浙江大学).黄志文(阿里巴巴).叶橄强(浙江大学).文博(浙江大学).张伟(阿里巴巴),陈华钧*(浙江大学) 接收会议: ICDE 2021 1. 文章导读 本文介绍了浙江大学阿里巴 ...

  6. java知识回顾_Java7 –回顾

    java知识回顾 我开始写博客文章,介绍即将发布的Java8版本中的新增功能 ,并认为我将从快速回顾一下Java7带给我们的内容开始. Java7于2011年7月发布,被描述为"更具进化性而 ...

  7. 技术实践 | ICDE2021-大规模知识图谱预训练及电商应用

    本文作者 | 张文(浙江大学).黄志文(阿里巴巴).叶橄强(浙江大学).文博(浙江大学).张伟(阿里巴巴),陈华钧*(浙江大学) 接收会议 | ICDE2021 转载公众号 | ZJUKG (欢迎转载 ...

  8. Java 知识总结大汇总!看完哪个都变大佬!

    免费编程资源大全项目:https://github.com/liyupi/free-programming-resources 大家好,我是鱼皮,今天分享 十几个 让人直呼 "哇塞" ...

  9. java知识精华总结

    Java 知识--精华总结 一. -java 概述与基础知识-6 1.何为编程?-6 2.Java 语言概述,历史.特点- 6 3.什么是跨平台性?原理是什么?JVM- 7 4.Jre 和 Jdk 的 ...

最新文章

  1. 翡润年华-毛货展示003
  2. 单片机值得学吗?会单片机能找什么工作?
  3. 算法-------寻找旋转排序数组中的最小值
  4. python3报错处理:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1
  5. 去掉中文语言下 wget下载提示 英国中部时间 的问题
  6. PKCS5Padding与PKCS7Padding的区别
  7. 链表/模拟 - 两数相加
  8. Linux笔记-iptables规则原理和组成
  9. Redis分布式缓存安装和使用
  10. Android破解学习之路(十五)—— 【Unity3D】洛菲斯的呼唤(Lophis roguelike)无限金币(道具)的实现 破解
  11. [转帖]Dockerfile设置默认时区
  12. policy服务器未能登录,win7电脑提示group policy client服务未能登录的解决方法
  13. 谷歌Chrome浏览器就能远程控制安卓手机,电脑远程控制手机的快捷方法get!
  14. 汽车电子学习【车载网络CAN/LIN】
  15. 投稿经验分享之三:干货| 如何找寻合适的投稿期刊?
  16. 飞机大战(C语言版)
  17. MySQL DML数据库操作
  18. you-get下载神器的安装和使用
  19. Android4学习-高级编程读书笔记开始篇
  20. 非985 非211二本生的万字面试经历流水账

热门文章

  1. 高斯混合模型(GMM)和EM算法详解
  2. vue 获取dom子元素_vue获取dom元素注意事项
  3. vue-strap 修改Modal组件
  4. U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection
  5. Fundebug:JavaScript插件支持错误采样
  6. 计算机公办学校招收人数,速看!2021年城区小升初微机派位指南来了!
  7. 冒泡排序的最优时间复杂度
  8. 真 ● 禁秘技 ● 奥义 ● 终端美化
  9. 统御软件 (oKit)| 项目管理软件,项目管理咨询,项目需求管理工具,集成研发管理平台 ——管理咨询与实施工具 一站式项目管理解决方案...
  10. java可变参数(详解+代码样例)