总结
- 先写一个 判断是否为闰年的函数(代码中的fun函数)
- 再写一个 判断(年月日)日期是否合理存在 的函数(代码中的fun1函数)
- 再写一个 去重且日期格式化的函数(代码中的out函数)
- 在main函数中,把输入的字符串日期拆分成三个数字x,y,z,依题知,x,z可以是年份,【分析题目:这些日期都在1960年1月1日至2059年12月31日】,则 0<= x或z <=59 (年份前缀是20), 60<= x或z <=99 (年份前缀是19)
- 接下来分为以下四种情况,
x<=59 && z>=60
x>=60 && z<=59
x>=60 && z>=60
x<=59 && z<=59
例如第一种情况,x为20_ 的年份,z为19 _的年份,
【分析题目:多个日期从早到晚排列】,则先考虑输出以z为年份的日期,【分析题目:月/日/年,日/月/年,则z为年份,x、y为月、日或者日、月】,所以根据x和y的大小,数字小的月份先输出;
之后输出以x为年份的日期,【分析题目:年/月/日,则x为年份,y、z为月、日】,所以根据x和y的大小,数字小的月份先输出;以此类推。
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.math.*;
public class Main {
static List<String> list2 = new ArrayList<String>();
static String ss="";
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
String str=cin.next();
int x=Integer.valueOf(str.substring(0,2));
int y=Integer.valueOf(str.substring(3,5));
int z=Integer.valueOf(str.substring(6,8));
if(x<=59 && z>=60) {
//z作为年份
if(x<=y) {
if(fun1(1900+z,x,y)==true) {
out(1900+z,x,y);
}
}
if(fun1(1900+z,y,x)==true && x!=y) {
out(1900+z,y,x);
}
if(x>y) {
if(fun1(1900+z,x,y)==true) {
out(1900+z,x,y);
}
}
//x作为年份
if(fun1(2000+x,y,z)==true) {
out(2000+x,y,z);
}
}else if(z<=59 && x>=60) {
//x作为年份
if(fun1(1900+x,y,z)==true) {
out(1900+x,y,z);
}
//z作为年份
if(x<=y) {
if(fun1(2000+z,x,y)==true) {
out(2000+z,x,y);
}
}
if(fun1(2000+z,y,x)==true && x!=y) {
out(2000+z,y,x);
}
if(x>y) {
if(fun1(2000+z,x,y)==true) {
out(2000+z,x,y);
}
}
}else if(x>=60 && z>=60) {
//x作为年份
if(x<=z) {
if(fun1(1900+x,y,z)==true) {
out(1900+x,y,z);
}
}
//z作为年份
if(x<=y) {
if(fun1(1900+z,x,y)==true) {
out(1900+z,x,y);
}
}
if(fun1(1900+z,y,x)==true && x!=y) {
out(1900+z,y,x);
}
if(x>y) {
if(fun1(1900+z,x,y)==true) {
out(1900+z,x,y);
}
}
//x作为年份
if(x>z) {
if(fun1(1900+x,y,z)==true) {
out(1900+x,y,z);
}
}
}else if(x<=59 && z<=59) {
//x作为年份
if(x<=z) {
if(fun1(2000+x,y,z)==true) {
out(2000+x,y,z);
}
}
//z作为年份
if(x<=y) {
if(fun1(2000+z,x,y)==true) {
out(2000+z,x,y);
}
}
if(fun1(2000+z,y,x)==true && x!=y) {
out(2000+z,y,x);
}
if(x>y) {
if(fun1(2000+z,x,y)==true) {
out(2000+z,x,y);
}
}
//x作为年份
if(x>z) {
if(fun1(2000+x,y,z)==true) {
out(2000+x,y,z);
}
}
}
}
public static boolean fun(int year) {
if((year%4==0 && year%100!=0) || (year%400==0))
return true; //是闰年
else return false;
}
public static boolean fun1(int year,int month,int day) {
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);list1.add(3);list1.add(5);list1.add(7);
list1.add(8);list1.add(10);list1.add(12);
if(list1.contains(month)) {
if(day<=31 && day>0) return true;
}else if(!list1.contains(month) && month!=2 && month>0 && month<13) {
if(day<=30 && day>0) return true;
}else if(month == 2) {
if(fun(year)==true && day<=29 && day>0) return true;
if(fun(year)==false && day<=28 && day>0) return true;
}
return false;
}
public static void out(int year,int month,int day) {
ss="";
ss=String.valueOf(year)+"-";
if(month<=9 && month>0) ss+="0";
ss+=String.valueOf(month)+"-";
if(day<=9) ss+="0";
ss+=String.valueOf(day);
if(!list2.contains(ss)) {
list2.add(ss);
System.out.println(ss);
}
}
}