蓝桥杯Date日期排列

来源:互联网 发布:nginx 线程模型 编辑:程序博客网 时间:2024/06/06 04:51

蓝桥杯结束了,混了个省赛二等奖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;    }}
0 0