1. 任务概述
1.1 任务详情
某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休息日是否周末,为此,请你开发一个程序,当孙工输入年及月,以日历方式显示对应月份的休息日,用中括号进行标记.同时,统计出本月有几天休息,轮到周末休息有几天.(注:首次休息日是2020 年 2月 2 日)
1.2 任务目标
- 业务目标:让孙工找到当月休息日
- 技能目标:综合运用循环判断分支结构,对程序进行格式化输出
2. 任务分解
- 获得输入数据:年,月
- 显示指定月份信息
- 通过计算找出上三休一的休息日
- 对比输出统计信息
- 打印含有休息日信息的日历
- 程序回到下一次的输入数据状态
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