首页 > 解决方案 > 日期回文查找器无法正常运行 (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;
}

标签: javadatepalindrome

解决方案


这个练习很好,但很抱歉,你做错了。我认为我能做的最糟糕的事情就是为您解决问题并发布完整和/或可执行代码。因此,我将尝试引导您找到解决任务的正确方法。如果您尝试遇到问题,请随时在评论中跟进。

java.time

首先,LocalDate用于日期,而不是Date. 尽管有这个名字,但这个Date类并不代表一个日期,而是一个时间点(在那个时间点,地球上的任何地方都不是同一个日期)。相反,aLocalDate恰好是一个没有时间和时区的日期。正是你需要的。此外,该Date课程的设计总是很糟糕,现在已经过时了。

例如,为了在您的时区中获取今天的日期

    LocalDate date = LocalDate.now(ZoneId.systemDefault());

如果需要,您可以将不同的时区传递给该now方法。

要将日期转换为字符串,以便您可以检查它是否是回文,请使用aDateTimeFormatterformat. LocalDate您可以使用DateTimeFormatter.ofPattern()来构造格式化程序。当所有这些听起来都含糊不清甚至难以理解时,请使用您的搜索引擎查找示例和教程,以使其更加充实,或者查看文档,使用底部的链接。

您检查字符串是否为回文的方法非常优雅,因此您应该坚持下去。

当一个日期不是回文时,使用加 1 天的plusDays方法LocalDate得到第二天。LocalDate知道第二天,所以你不需要关心每个月的天数和闰年,所有这些都为你处理好了。只记得plusDays()返回一个您需要存储到变量中的新实例。 LocalDate

链接


推荐阅读