蓝桥杯 2017年 java 日期问题

在蓝桥杯练习系统中提交,始终只有50分,没有vip特权,看不了评测用例。
有没有同志看看哪里出问题了,万分感谢!



import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {

    static ArrayList<String> list = new ArrayList<String>();

    public static void main(String[] args) {

        String[] date = new Scanner(System.in).nextLine().split("/");
        allSort(date, 0);
        Collections.sort(list);
        String beforeString = "";
        for (int i = 0; i < list.size(); i++) {
            if (!list.get(i).equals(beforeString)) {
                System.out.println(list.get(i));
            }
            beforeString = list.get(i);
        }
    }

    public static void allSort(String[] date, int k) {
        if (k == 3) {
            isTrue(date);
            return;
        }
        for (int i = k; i < 3; i++) {
            String string = date[i];
            date[i] = date[k];
            date[k] = string;

            allSort(date, k + 1);

            string = date[i];
            date[i] = date[k];
            date[k] = string;
        }
    }

    private static void isTrue(String[] date) {
        int year = Integer.parseInt(date[0]);
        if (year >= 60 && year <= 99) {
            year += 1900;
        } else {
            year += 2000;
        }
        int month = Integer.parseInt(date[1]);
        int day = Integer.parseInt(date[2]);
        if (month >= 1 && month <= 12) {
            int flag = 0;
            switch (month) {
            case 1:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 3:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 5:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 7:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 8:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 10:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 12:
                if (day >= 1 && day <= 31) {
                    flag = 1;
                }
                break;
            case 4:
                if (day >= 1 && day <= 30) {
                    flag = 1;
                }
                break;
            case 6:
                if (day >= 1 && day <= 30) {
                    flag = 1;
                }
                break;
            case 9:
                if (day >= 1 && day <= 30) {
                    flag = 1;
                }
                break;
            case 11:
                if (day >= 1 && day <= 30) {
                    flag = 1;
                }
                break;
            case 2:
                if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {// 闰年
                    if (day >= 1 && day <= 29) {
                        flag = 1;
                    }
                } else {
                    if (day >= 1 && day <= 28) {
                        flag = 1;
                    }
                }
                break;

            }

            if (flag == 1) {
                String smonth = month < 10 ? "0" + month : month + "";
                String sday = day < 10 ? "0" + day : day + "";
                String result = year + "-" + smonth + "-" + sday;
                list.add(result);
            }
        }

    }

}

public class DateProblem {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        Scanner scanner = new Scanner(System.in);
        String string=scanner.nextLine();
        String res[]=string.split("/");   //01/02/03

    int a=Integer.valueOf(res[0]);
        int b=Integer.valueOf(res[1]);
        int c=Integer.valueOf(res[2]);
       if(fun(a,b,c)){              //fun(a,b,c)判断是否合法
          set.add(fullcheck(a,b, c));  //做好格式转换添加
       }
        if(fun(c,a,b)){              //fun(a,b,c)判断是否合法
            set.add(fullcheck(c,a,b));  //做好格式转换添加
        }
        if(fun(c,b,a)){              //fun(a,b,c)判断是否合法
            set.add(fullcheck(c,b,a));  //做好格式转换添加
        }

for(String i:set){
    System.out.println(i);
}
    }
    static boolean fun(int a,int b,int c){
if(b>12||c>31||b==0||c==0)return false;  //起始要求:0
if(!isleap(a)&&b==2)    //如果是平年 月份为二 c!=29 30 31
    if(c==29||c==30||c==31)return false;
if(isleap(a)&&b==2)     //如果是闰年  月份为二  c!=30 31
    if(c==30||c==31)
        return false;
    switch (b){                          //判断日可否为31天   //1 3 5 7 8 10 12
        case 4:
        case 6:
        case 9:
        case 11:
            if(c==31)return false;
            break;
        default:break;
    }
    return true;
    }
    static String fullcheck(int a,int b,int c){
        return ((a>=60?"19":"20")+ToString(a)+"/"+ToString(b)+"/"+ToString(c));
    }
    static String ToString(int a){
        if(a<10)return ("0"+ a);
        else return String.valueOf(a);
    }
    static boolean isleap(int a){
       int b=a+((a>=60)?1900:2000);
       return ((b%4==0)&&(b%100!=0))||(b%400==0);
    }
    }