这题main类不难MyDate类代码如下:

class MyDate{
    int day;
    int year;
    int month;
    public int getYear() {
        return year;
    }
    public int getMonth() {
        return month;
    }
    public int getDay() {
        return day;
    }
    void print(){
        System.out.printf("%d/%d/%d",month,day,year);
    }
    int compare(MyDate d){
        if(d.year>this.year)
            return -1;
        if(d.year==this.year)
        {
            if (d.month==this.month)
                if (d.day > this.day)
                    return -1;
                else if (d.day==this.day)
                    return 0;
                else
                    return 1;
            if (d.month>this.month)
                return -1;
        }
        return 1;
    }
}

三个get方法都没啥难点,print记得用printf格式化输出,比较方便。

注意点:compare方法中,接收了一个对象,而MyDate类中的年月日都没有写private,故可直接d.year使用变量(“d”为对象名);核心代码为比较两个日期的先后,上面展示的是“笨办法”,挨着比较年月日。其实还可以计算两个日期的天数,先把年*365+月*30+日,不需要考虑润年,每个月全按30天也不会出错,因为两个日期用相同的算法算出来的值,虽然不准确,但是他们的相对时间是可以比较的,下面给出此方法示例compare方法代码

int compare(MyDate d){
        int day1=0,day2=0;
        day1=this.day+this.month*30+this.year*365;
        day2=d.day+d.month*30+d.year*365;
        if (day1>day2)
            return 1;
        if (day2>day1)
            return -1;
        return 0;
    }

诶,还是给一下配套main类叭

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        MyDate Date1=new MyDate();
        Date1.year=input.nextInt();
        Date1.month=input.nextInt();
        Date1.day=input.nextInt();
        MyDate Date2=new MyDate();
        Date2.year=input.nextInt();
        Date2.month=input.nextInt();
        Date2.day=input.nextInt();
        Date1.print();
        System.out.print(" "+Date1.compare(Date2));
    }
}

仅供参考,如有更优解,可在评论区参与讨论

届ける言葉を今は育ててる
最后更新于 2022-04-05