蓝桥杯结束了,混了个省赛二等奖23333,原本都已经不抱希望了。
第一道大的编程题有点不甘心,差点就完成了
输入:02-05-21
输出三种可能的年月日,并从小到大排序:
年-月-日 2002-05-21
月-日-年 2021-02-05
日-月-年 2021-05-02
(限定日期范围1951-01-01到2050-12-31)
import java.sql.Date;
import java.util.Scanner;
public class Datemore {
//两个边界日期
static Date start = Date.valueOf("1951-01-01");
static Date end = Date.valueOf("2050-12-31");
public static void main(String[] args) {
//可能的三个日期
Date a,b,c;
//测试
//a = Date.valueOf("2003-02-29");
//System.out.println(a.toString());
//2003-02-29是不存在的日期,如果toString()输出,就转变成了2003-03-01
//System.out.println();
Scanner sc = new Scanner(System.in);
String getin = sc.nextLine();
sc.close();
//按“-”划分成三段
String[] temp = getin.split("-");
//三种可能的排列
String aa,bb,cc;
//格式化成正常的年份
if(Integer.parseInt(temp[0])>=51){
aa = "19"+temp[0]+"-"+temp[1]+"-"+temp[2];
}else{
aa = "20"+temp[0]+"-"+temp[1]+"-"+temp[2];
}
if(Integer.parseInt(temp[1])>=51){
bb = "19"+temp[2]+"-"+temp[0]+"-"+temp[1];
}else{
bb = "20"+temp[2]+"-"+temp[0]+"-"+temp[1];
}
if(Integer.parseInt(temp[2])>=51){
cc = "19"+temp[2]+"-"+temp[1]+"-"+temp[0];
}else{
cc = "20"+temp[2]+"-"+temp[1]+"-"+temp[0];
}
try{
a = Date.valueOf(aa); //获取输入,以三种可能的顺序用valueOf格式输入到 a,b,c
}catch (java.lang.IllegalArgumentException e) {
//如果是不合法的输入,就置为flag 2333-03-03
//这里可以写到外部函数里去(重复代码)
a = Date.valueOf("2333-03-03");
}
try{
b = Date.valueOf(bb);
}catch (java.lang.IllegalArgumentException e) {
b = Date.valueOf("2333-03-03");
}
try{
c = Date.valueOf(cc);
}catch (java.lang.IllegalArgumentException e) {
c = Date.valueOf("2333-03-03");
}
//检查日期
a = check(a,aa);
b = check(b,bb);
c = check(c,cc);
//输入到一个数组,从小到大排序(选排)
Date[] line = {a,b,c};
Date temp2 = a;
int min = 0;
for(int i = 0;i<3;i++){
temp2 = line[i];
for(int j = i;j<3;j++){
if(line[j].compareTo(temp2)<0){
//compareTo(date)如果参数 date 等于此 Date,则返回值 0;如果此 Date 在 date 参数之前,则返回小于 0 的值;如果此 Date 在 date 参数之后,则返回大于 0 的值。
min = j;
temp2 = line[j];
line[min] = line[i];
line[i] = temp2;
}
}
}
//输出
for (int i = 0;i<3;i++) {
if(!line[i].toString().equals("2333-03-03")){
System.out.println(line[i].toString());
}
}
}
//check()函数
private static Date check(Date t, String tt) {
//如果日期不存在或不在范围内,置空(其实不好置空,干脆置一个特殊值)
if(!t.toString().equals(tt)||!t.after(start)||!t.before(end)){
t = Date.valueOf("2333-03-03");
}
return t;
}
}