1. 任务概述

1.1 任务详情

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

1.2 任务目标

  1. 业务目标:让孙工找到当月休息日
  2. 技能目标:综合运用循环判断分支结构,对程序进行格式化输出

2. 任务分解

  1. 获得输入数据:年,月
  2. 显示指定月份信息
  3. 通过计算找出上三休一的休息日
  4. 对比输出统计信息
  5. 打印含有休息日信息的日历
  6. 程序回到下一次的输入数据状态

3. 代码

1.Views


```java
package com.java.findrestday;import java.util.Scanner;public class Views {private Scanner text = new Scanner(System.in);/*** 用户输入年* @return*/public int year(){System.out.println("请输入年:");String y = text.nextLine();int year = 0;try {year = Integer.parseInt(y);}catch(NumberFormatException e){}if(year<2020){System.out.println("输入有误,请重新输入");return year();}return year;}/*** 用户输入月* @return*/public int month(){System.out.println("请输入月:");String m = text.nextLine();int month = -1;try {month = Integer.parseInt(m);}catch(NumberFormatException e){}if(month<1 || month>12){System.out.println("输入有误,请重新输入");return month();}return month;}}

2. Main

package com.java.findrestday;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class Find {public static void main(String[] args) throws ParseException {Views view = new Views();int year = view.year();int month = view.month();Calendar cl = Calendar.getInstance();//获取用户指定的日期cl.set(Calendar.YEAR,year);cl.set(Calendar.MONTH,month-1);int maxDay = cl.getActualMaximum(Calendar.DAY_OF_MONTH);//获取指定时间天数//计算输入月份月末-首次休息日的间隔天数SimpleDateFormat s = new SimpleDateFormat("yyyy-M-d");//设置日期格式String beginRestDay = "2020-2-2";//首次休息日String monthFirstDay = year + "-" +month + "-" + "1";//指定月份第一天String monthLastDay = year + "-" +month + "-" + maxDay;//指定月份最后一天Date begin = s.parse(beginRestDay);Date monthFirst = s.parse(monthFirstDay);Date monthLast = s.parse(monthLastDay);int betweenDays = (int)((monthLast.getTime()-begin.getTime())/1000/60/60/24);//将date类型的数据转化为calendar类Calendar cFirst = Calendar.getInstance();Calendar cLast = Calendar.getInstance();Calendar cRest = Calendar.getInstance();cFirst.setTime(monthFirst);cLast.setTime(monthLast);cRest.setTime(begin);//计算间隔天数中的休息日并放入数组中Date[] allRestDay = new Date[betweenDays];for(int i=0;i<betweenDays/4;i++){cRest.add(Calendar.DATE,4);//上三休一Date d = cRest.getTime();//将获取日期转换成日期类allRestDay[i] = d;//存放进数组中}//查询月份的休息日int[] restOfSelectMonth = new int[betweenDays*2];int[] restOfSelectMonth2 = new int[maxDay];Calendar forChange = Calendar.getInstance();int countRest = 0;for(int j=0;j<betweenDays/4;j++){forChange.setTime(allRestDay[j]);if((cLast.get(Calendar.YEAR) == forChange.get(Calendar.YEAR)) &&(cLast.get(Calendar.YEAR) == forChange.get(Calendar.YEAR))){restOfSelectMonth[j] = forChange.get(Calendar.DATE);restOfSelectMonth2[countRest] = restOfSelectMonth[j];countRest ++;}}if ((year == 2020) && (month == 2)){countRest ++;   // 2020年2月2日未计入休息日  restDay[i]}//计算休息日是周末的天数int weekendRest = 0;for(int i=0;i<countRest;i++){String str = year+"-"+month+"-"+restOfSelectMonth2[i];Date weekRest = s.parse(str);Calendar cal = Calendar.getInstance();cal.setTime(weekRest);if((cal.get(Calendar.DAY_OF_WEEK)==7) ||(cal.get(Calendar.DAY_OF_WEEK)==1)){weekendRest++;}}if ((year == 2020) && (month == 2)) {weekendRest ++;   // 以2020年2月为例,2020年2月2日未计入,2月2日为周7}/*** 打印*/System.out.println("星期日"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+"\t星期五"+"\t星期六");int first = cFirst.get(Calendar.DAY_OF_WEEK)-1;//指定月份的第一天为周几if((first+1) == 1){first = 7;}for(int i=0;i<first-1;i++){System.out.printf("%-8s","");//在first之前无日期出现}int j = 0;for(int i=1;i<maxDay+1;i++) {if ((year == 2020 && month == 2 && i == 2) || restOfSelectMonth2[j] == i){System.out.printf("%-8s","["+i+"] ");j++;}else{System.out.printf("%-8s",i);//非休息日正常打印}if((i+first-1)%7 == 0){System.out.println();//日历换行}}System.out.println();System.out.println("本月休息天数有:"+countRest+"天");System.out.println("本月轮到周末休息天数是:"+weekendRest+"天");}
}

4. 运行结果

Java习题-找到休息日相关推荐

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

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

  2. JAVA 知识----找到休息日训练任务

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

  3. Java找到休息日问题

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

  4. linux收缩java位置,找到linux中当前java的安装位置

    先看java -version $java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111 ...

  5. java udp ip端口 设置_UDP端口扫描Java只找到1个开放的UDP端口

    我对端口扫描有一个分歧.我在 Java中扫描一些IP地址的UDP端口.在我的程序中(假设一切正常)我只能找到一个开放的UDP端口.在另一方面端口扫描"nmap"我得到4个开放的UD ...

  6. 2018java计算机二级考试试题和答案,2018年计算机等级考试二级JAVA习题答案(1)

    <2018年计算机等级考试二级JAVA习题答案(1)>由会员分享,可在线阅读,更多相关<2018年计算机等级考试二级JAVA习题答案(1)(6页珍藏版)>请在人人文库网上搜索. ...

  7. Java学习练习题08:Java习题及代码08

    Java学习练习题08: Java习题及代码08: 链接:https://pan.baidu.com/s/1_PCPo7SI2fRFph02l2UCpQ  提取码:zapx

  8. java 字符串 数组 索引_如何在Java中找到数组中元素的索引?

    我希望在Java中找到给定元素的索引,知道它的内容. 我尝试了以下示例,该示例不起作用: class masi { public static void main( String[] args ) { ...

  9. 低学历转Java能找到工作吗?

    不管是什么行业,学历都会成为企业招人的标准,只是各自标准不一.不知道你所谓的低学历是指到什么程度,大专以下吧. 一.低学历转Java能找到工作吗? 能!现在有一句话叫做"三百六十行,行行转J ...

最新文章

  1. Android NDK 简单介绍、工具安装、环境配置
  2. 百度工程师控制公司服务器“挖矿”:4个月赚10万 判刑3年
  3. 算法分析与设计——蛮力法0/1背包
  4. 聊一聊单机、集中式、分布式和云原生存储
  5. 机器学习中的常用概率分布
  6. OpenCV3学习(11.5) FAST特征检测器FastFeatureDetector
  7. 浙江独立学院计算机专业排名2015,2014-2015年中国独立学院排名
  8. Spring Cloud(7.2):配置Producer Server
  9. 用PPT直接修改主集成模板,并保存为pps格式,即可现场展示应用.
  10. 开根号计算机在线应用,根号计算器(万能计算器在线计算)
  11. clappr.js:Web开源媒体播放器,可扩展网页媒体播放器
  12. 使用POI中XSSF 实现“合并单元格时,仅保留左上角单元格的值,而放弃其他的值“ 问题排查笔记
  13. 7z解压crc错误_rar文件解压缩失败解压末端出现错误的解决方法
  14. 修改ua html5,html5中bootstrap表单样式文件html,兼容多种UA终端
  15. Vins-Mono系列代码和理论解读<五>.位姿图Pose_graph理论和代码实现细节
  16. 进击的Android之manifests
  17. es6 filter数组过滤方法
  18. Keras中predict()方法和predict_classes()方法和evaluate()方法
  19. 动画特效十四:手风琴效果
  20. 《宝塔面板教程5》:如何上传网站程序安装自己的网站

热门文章

  1. 赛门铁克承诺提供证书审计计划来安抚 Google
  2. 小红书爆款标题模板分享,这5种标题1秒吸睛
  3. 激光SLAM算法 -1:激光SLAM简介
  4. php版本中gd什么东西,PHP下GD安装全攻略
  5. APCAD三维开发平台简介
  6. xgboost处理二分类问题原理
  7. java io流练习题
  8. 【Linux/lvm命令】Linux通过lvremove命令移除逻辑卷时报错?(通过vgreduce --removemissing sys_vg00命令解决)工作实战(已解决)20200709
  9. 【python】python基础测试100题
  10. 云原生大数据 Meetup|云原生时代下的数据计算基础设施