Java 如果两个日期相隔一个月

Java 如果两个日期相隔一个月,java,calendar,Java,Calendar,我对这个程序有点小问题。我假设两个日期之间相隔一个月是30天。该程序适用于所有测试日期,但monthApart(2、14、3、15)调用除外,该调用返回false而不是true。任何帮助都将不胜感激,谢谢 这个程序应该能分辨两个日期是否相隔一个月。假设用户输入了有效的月份和日期。编写一个名为monthApart的方法,该方法接受表示两个日历日期的四个整数参数。每个日期包括一个月(1至12)和一天(1至该月的天数[28-31])。该方法返回日期是否至少相隔一个月。假设此问题中的所有日期都发生在同一

我对这个程序有点小问题。我假设两个日期之间相隔一个月是30天。该程序适用于所有测试日期,但monthApart(2、14、3、15)调用除外,该调用返回false而不是true。任何帮助都将不胜感激,谢谢

这个程序应该能分辨两个日期是否相隔一个月。假设用户输入了有效的月份和日期。编写一个名为monthApart的方法,该方法接受表示两个日历日期的四个整数参数。每个日期包括一个月(1至12)和一天(1至该月的天数[28-31])。该方法返回日期是否至少相隔一个月。假设此问题中的所有日期都发生在同一年。比如说,

以下日期均被视为至少相隔一个月 9/19(9月19日):2/14、7/25、8/2、8/19、10/19、10/20和11/5

以下日期与9月19日至少相隔一个月:9月20日, 9/28、10/1、10/15和10/18

请注意,第一个日期可能在第二个日期之前或之后(或与之相同)。假设传递的所有参数值都是有效的

问题的答案: 电话:回答:结果:

1个月(6、14、9、21)正确

2个月(4,5,5,15)正确

3个月(4,15,5,15)正确

4个月(4,16,5,15)假假假

5个月(6,14,6,8)假假假

6个月(7,7,6,8)假假假

7个月(7,8,6,8)正确

8个月(10,14,7,15)正确

9个月(2,14,3,15)对错

10个月(1,1,12,31)正确

电话样本:

呼叫返回,因为monthApart(6,14,9,21)6月14日是真实的 9月21日前至少一个月

monthApart(4,5,5,15)4月5日至少是一个月前 5月15日

4月15日至少是一个月前 5月15日

蒙塔帕特(4,16,5,15)假4月16日至少不是一个月 5月15日前

蒙塔帕特(6,14,6,8)假6月14日至少不是一个月 除了6月8日

蒙塔巴特(7,7,6,8)假7月7日至少相隔一个月 从6月8日开始

monthApart(7,8,6,8)真正的7月8日至少是6月之后的一个月 第八

10月14日至少是一个月 7月15日以后

我的代码现在很乱;我待会再清理

public static boolean monthApart(int monthOne, int dayOne, int monthTwo, int dayTwo){
    int monthDays = -1; 
    int monthMin = Math.min(monthOne, monthTwo); // Gets the lesser month

    if (monthOne<1 || monthOne >12 || monthTwo>12 || monthOne<1) { // If not a possible month
        throw new IllegalArgumentException("Out of range");
    }

    switch(monthMin) { // Gets the corresponding last day of month
        case 1:
            monthDays = 31;
            break;
        case 2:
            monthDays = 28;
            break;
        case 3:
            monthDays = 31;
            break;
        case 4:
            monthDays = 30;
            break;
        case 5:
            monthDays = 31;
            break;
        case 6:
            monthDays = 30;
            break;
        case 7:
            monthDays = 31;
            break;
        case 8: 
            monthDays = 31;
            break;
        case 9:
            monthDays = 30;
            break;
        case 10:
            monthDays = 31;
            break;
        case 11:
            monthDays = 30;
            break;
        case 12:
            monthDays = 31;
            break;
    }

    int dayFirst = -1; // Plan: Last day of month-day of lower month + days on next month
    int daySecond = -1;
    if (monthOne<monthTwo) {
        dayFirst = dayOne;
        daySecond = dayTwo;
    } else if (monthOne>monthTwo) {
        dayFirst = dayTwo;
        daySecond = dayOne;
    }

    if (Math.abs(monthOne-monthTwo)>1) { // More than a month apart
        return true;
    } else if (monthOne==monthTwo) { // Same month
        return false;
    } else if (Math.abs(monthOne-monthTwo)==1) { // Adjacent months

        if (((monthDays-dayFirst) + daySecond) < 30 ) { // Gets difference in days
            return false;
        } else {
            return true;
        }
    }
    return false;
}
publicstaticbooleanmonthapart(int-monthOne,int-dayOne,int-monthTwo,int-dayTwo){
int monthDays=-1;
int monthMin=Math.min(monthOne,monthTwo);//获取较小的月份
如果(12 | | | monthwo>12 | | monthOne1){//相隔一个月以上
返回true;
}如果(monthOne==monthwo){//当月
返回false;
}else如果(Math.abs(monthOne-monhtwo)=1{//相邻月份
如果(((monthDays dayFirst)+daySecond)<30,{//得到天数差
返回false;
}否则{
返回true;
}
}
返回false;
}

您可能需要检查
是否(((monthDays dayFirst)+DaysSecond)<30)
您的代码的一部分。 事实上,您可以通过替换值来简单地查看此比较是否正确

调用
monthApart(2,14,3,15)
将使
monthDays
变为28,
dayFirst
变为14,
daySecond
变为15。因此,将其与28-14+15<30进行比较,这是正确的


我假设你犯了一个错误,在上面的计算中没有计算开始日期。(即从1月1日到1月31日的总天数是31-1+1=31天,而不是31-1=30天。)

我知道了。与其假设“相隔一个月”是30天,不如假设该月的天数

    if (((monthDays-dayFirst) + daySecond) < 30 ) { // Gets difference in days
        return false;
    } else {
        return true;
    }
if(((monthDays dayFirst)+DaysSecond)<30){//获取天数差异
返回false;
}否则{
返回true;
}
应该是

    if (((monthDays-dayFirst) + daySecond) < monthDays) { // Gets difference in days
        return false;
    } else {
        return true;
    }
if(((monthDays dayFirst)+DaysSecond)
我假设你不能使用
日历
作业时间
是的。我应该能够用这本书的内容来完成这项工作,所以我不想使用到目前为止这本书没有涵盖的任何内容。你不需要使用
monthDays
来确定相邻月份的天数是否相隔一个月…有一种更简单的方法…如果(monthOne12 | | | monthwo>12 | | | monthonei如果你假设“相隔一个月”是30天,那么你的计划是正确的,因为2/14和3/15相隔29天。你期望得到什么结果?