一道Java题,要求输出与题一致

判断输入的值是否为世界完全对称日,并且输出它的前一个世界完全对称日和后一个世界完全对称日


import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/**
 * 世界完全对称日是指公历纪年日期中数字左右完全对称的日期
 * 如2010年1月2日(20100102).2011年11月2日(20111102)2020年2月2日
 * (20200202)等
 * 请用Java编写出计算世界完全对称日的程序
 * 要求输入一个日期(yyyy-mm-dd),判断当前是不是世界完全对称日,并计算距
 * 离这个日期最近的上—个世界完全对称日和最近的下一个世界完全对称日的日期
 * 例如输入:2021-11-02
 * 则输出:2021-11-02不是世界完全对称目距离2021-11-02最近的下一个世界对
 * 称日是2021-12-02,距离2021-11-02最近的上一个世界对称日是2020-02-02
 */
public class Main {
    public static void main(String[] args) {
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Scanner s = new Scanner(System.in);
        String strDate = s.nextLine();
        StringBuffer sb = new StringBuffer(strDate);
        sb.deleteCharAt(sb.indexOf("-")).deleteCharAt(sb.indexOf("-"));
        if(sb.toString().equals(sb.reverse().toString())){
            System.out.println(strDate + "是世界完全对称日!");
        }else{
            String lastStr = "";
            String nextStr = "";
            String str = "";
            boolean lastFlag = true;
            boolean nextFlag = true;
            int day = 1;
            while(lastFlag || nextFlag){
                //  下一个世界对称日
                if(nextFlag){
                    Calendar calendar = Calendar.getInstance();
                    calendar.add(Calendar.DAY_OF_YEAR, day);
                    str = df.format(new Date(calendar.getTime().getTime()));
                    sb = new StringBuffer(str);
                    sb.deleteCharAt(sb.indexOf("-")).deleteCharAt(sb.indexOf("-"));
                    if(sb.toString().equals(sb.reverse().toString())){
                        nextStr = str;
                        nextFlag = false;
                    }
                }
                //  上一个世界对称日
                if(lastFlag){
                    Calendar calendar = Calendar.getInstance();
                    calendar.add(Calendar.DAY_OF_YEAR, -day);
                    str = df.format(new Date(calendar.getTime().getTime()));
                    sb = new StringBuffer(str);
                    sb.deleteCharAt(sb.indexOf("-")).deleteCharAt(sb.indexOf("-"));
                    if(sb.toString().equals(sb.reverse().toString())){
                        lastStr = str;
                        lastFlag = false;
                    }
                }


                ++day;
            }
            System.out.println(strDate + "不是世界完全对称目距离"+
                    strDate+",最近的下一个世界对称日是"+ nextStr +",距离"+
                    strDate+"最近的上一个世界对称日是"+lastStr);
        }

    }
}

如果对你有帮助,请采纳一下哈!!!

这道题的思路可以是 对所有0000-9999年份进行遍历。能反转成为月、日的 便符合题意。


import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class WorldFullSymmetryDay {

    private static final DateTimeFormatter SIMPLE_DATE = DateTimeFormatter.ofPattern("yyyyMMdd");
    private static final DateTimeFormatter REVERSE_DATE = DateTimeFormatter.ofPattern("ddMMyyyy");

    private static boolean validate(LocalDate localDate) {
        String date = localDate.format(SIMPLE_DATE);
        String reverse = new StringBuilder(date).reverse().toString();
        return date.equals(reverse);
    }

    public static void main(String[] args) {
        String input = "2021-11-02";
        LocalDate localDate = LocalDate.parse(input, DateTimeFormatter.ISO_LOCAL_DATE);
        if (validate(localDate)) {
            System.out.println(String.format("%s 是世界完全对称日", localDate));
        } else {
            System.out.println(String.format("%s 不是世界完全对称日", localDate));
            for (LocalDate nextDay = localDate.plusDays(1L); ; nextDay = nextDay.plusDays(1L)) {
                if (validate(nextDay)) {
                    System.out.println(String.format("下一个世界完全对称日是 %s", nextDay));
                    break;
                }
            }
            for (LocalDate previousDay = localDate.minusDays(1L); ; previousDay = previousDay.minusDays(1L)) {
                if (validate(previousDay)) {
                    System.out.println(String.format("上一个世界完全对称日是 %s", previousDay));
                    break;
                }
            }
        }
    }
}