判断输入的值是否为世界完全对称日,并且输出它的前一个世界完全对称日和后一个世界完全对称日
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;
}
}
}
}
}