判断日期经常合法出现在IO场景下,下面将使用简练的思路和代码呈现给大伙!
实现思路:
1、声明并初始化一个整型数组,表示各个月中最大的天数,数组长度刚好为12(注意:该数组在平年条件下使用)
2、定义一个方法,判断用户输入的月份是否在[1,12]区间,然后再判断年份是平年还是闰年,最后根据年份的类型去判断天数是否正确(利用数组去判断)
这里大家可能有些疑问?
Q1 : 为什么使用数组代表最大天数?
A1:因为各个月的天数规律并不像月份那样明显(月份是递增序列),而利用数组表示天数可以达到一个以空间换时间的目的,减少的if else的分支代码。
完整代码如下:
import java.util.Scanner;
public class CheckDate{
//各个月中最大天数
private static int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(judge(sc.nextInt(),sc.nextInt(),sc.nextInt()));
}
//判断日期合法性
public static boolean judge(int year, int month, int day){
//首先判断月份是否合法
if (month >= 1 && month <= 12){
//判断是否为闰年
if ((year % 100 == 0 && year % 400 == 0) || year % 4 == 0){
//判断当前月份是否为2月,因为闰年的2月份为29天
if (month == 2 && day <= 29) return true;
else {
if (day <= days[month-1]) return true;
}
}else {
if (day <= days[month-1]) return true;
}
}
return false;
}
}
运行效果:2021为平年,2月只有28天,所以返回false
如果该篇文章对您有帮助,可以点个💖加收藏,同行作伴,一路逐梦~