
分析:这个题目有如下要求:
- 是否是合法日期
- 是否是回文数字
- 是否是ABABBABA类型的数字
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int inputYear = input.nextInt();
int flag = 1;
while (inputYear++ < 89991231) {
//如果不是合法日期 进入下一次循环
//如果是合法日期 判断是否是回文 和是否是ABAB BABA类型的日期
if (!isTure(inputYear)) {
continue;
}else {
//如果是回文并且flag为1时 输出下一个回文数 并将flag置为0,该if不再有输出
if (isHuiWen(inputYear) && flag == 1 ) {
System.out.println(inputYear);
flag = 0;
}
//判断是否是ABAB BABA类型的日期 如果是则输出该数字 并退出循环
if (isSecondType(inputYear) ) {
System.out.println(inputYear);
break;
}
}
}
input.close();
}
//判断是不是ABAB BABA类型的函数
public static boolean isSecondType(int inputYear1) {
//先转换为字符串
String str = String.valueOf(inputYear1);
//比较字符串的各个位置是否满足ABAB BABA类型
if ( str.charAt(0) == str.charAt(2)
&& str.charAt(5) == str.charAt(7)
&& str.charAt(0) == str.charAt(5)
&& str.charAt(0) != str.charAt(1)
&& str.charAt(1) == str.charAt(3)
&& str.charAt(4) == str.charAt(6)
&& str.charAt(4) == str.charAt(1)) {
return true;
}
return false;
}
public static boolean isTure(int inputYear3) {
//定义一个二维数组 第一个(run[0][])存放闰年每个月份的天数 第二个(run[1][])存放非闰年每个月份的天数
//第一个元素为0 是因为 月份从1开始计数
int[][] run = { { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
//先转换为字符串
String s = String.valueOf(inputYear3);
//得出年份
int y = (s.charAt(0) - '0') * 1000 + (s.charAt(1) - '0') * 100 + (s.charAt(2) - '0') * 10 + (s.charAt(3) - '0');
//得出月份
int m = (s.charAt(4) - '0') * 10 + (s.charAt(5) - '0');
//得出天数
int d = (s.charAt(6) - '0') * 10 + (s.charAt(7) - '0');
//如果月份超过12 返回false
if (m > 12) {
return false;}
//判断是否是闰年 如果是闰年f=0 对应的run数组中的run[0][] 否则f=1 对应run[1][]
int f = (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0) ? 0 : 1;
//如果天数超过了每个月份对应的天数 返回false
if (d > run[f][m])
return false;
return true;
}
//判断是否是回文的函数
public static boolean isHuiWen(int inputYear2) {
//先转换为字符串
String str = String.valueOf(inputYear2);
//转换为StringBuilder 方便使用reverse()方法
final StringBuilder builder = new StringBuilder(str);
//判断是否是回文
if (builder.reverse().toString().equals(str)) {
return true;
}
return false;
}
}
运行结果:
版权声明:本文为sinat_51673411原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。