java - 日期回文查找器无法正常运行 (Java)
问题描述
我对编程很陌生,我试图找到下一个最近的回文日期,我编写了以下代码。但我面临的问题是它不断地一次又一次地打印出完全相同的东西,而不是增加日期或月份。我试图调试这个,但我没有看到哪里出错了,谁能告诉我怎么做!
public static void main(String[] args) {
Date date = new Date();
int year = 1900+date.getYear();
int month = 1+date.getMonth();
int currDate = date.getDate();
String currDate1 = formatter(currDate);
String month1 = formatter(month);
String theDate = currDate1+month1+year;
while(palindromeChecker(theDate)){
if(month==12) {
year++;
month=1;
}
if(year%4 == 0 && year%100 !=0 && year%400 == 0) {
if (month == 2 && currDate == 29) {
month++;
currDate = 1;
}
}
else {
if (month == 2 && currDate == 28) {
month++;
currDate = 1;
}
}
switch (month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(currDate==31) month++; currDate=1; break;
case 4: case 6: case 9: case 11:
if(currDate==30) month++; currDate=1; break;
}
currDate++;
theDate = formatter(currDate)+formatter(month)+year;
System.out.println(theDate);
}
}
public static String formatter(int a){
return new DecimalFormat("00").format(a);
}
public static boolean palindromeChecker(String a){
String b = new StringBuilder(a).reverse().toString();
if(a.equals(b)) return false;
else return true;
}
解决方案
这个练习很好,但很抱歉,你做错了。我认为我能做的最糟糕的事情就是为您解决问题并发布完整和/或可执行代码。因此,我将尝试引导您找到解决任务的正确方法。如果您尝试遇到问题,请随时在评论中跟进。
java.time
首先,LocalDate
用于日期,而不是Date
. 尽管有这个名字,但这个Date
类并不代表一个日期,而是一个时间点(在那个时间点,地球上的任何地方都不是同一个日期)。相反,aLocalDate
恰好是一个没有时间和时区的日期。正是你需要的。此外,该Date
课程的设计总是很糟糕,现在已经过时了。
例如,为了在您的时区中获取今天的日期
LocalDate date = LocalDate.now(ZoneId.systemDefault());
如果需要,您可以将不同的时区传递给该now
方法。
要将日期转换为字符串,以便您可以检查它是否是回文,请使用aDateTimeFormatter
和format
. LocalDate
您可以使用DateTimeFormatter.ofPattern()
来构造格式化程序。当所有这些听起来都含糊不清甚至难以理解时,请使用您的搜索引擎查找示例和教程,以使其更加充实,或者查看文档,使用底部的链接。
您检查字符串是否为回文的方法非常优雅,因此您应该坚持下去。
当一个日期不是回文时,使用加 1 天的plusDays
方法LocalDate
得到第二天。LocalDate
知道第二天,所以你不需要关心每个月的天数和闰年,所有这些都为你处理好了。只记得plusDays()
返回一个您需要存储到变量中的新实例。 LocalDate
链接
- Oracle 教程:日期时间解释如何使用 java.time。
- 的文件
LocalDate
- 的文件
DateTimeFormatter
推荐阅读
- c - 使用 clang 编译最小的测试共享库
- angular - Angular Routing 没有导航到子路由
- symfony - 我的谷歌地图只有在我刷新我的页面时才会显示?第一次怎么显示?
- c++ - 如何正确使用 std::function 作为谓词
- azure - Windows 虚拟桌面为什么需要将 AD 同步到 Azure AD
- git - 分支未正确合并到 Git 中的 master 中
- javascript - 在滚动页面上淡出 - 背景 div
- c# - 证书具有不受支持的关键扩展
- javascript - 通过所有者 ids Mongoose 查找聊天室
- java - 如何修复决定树是否为平衡树的方法?