class Date {
private int day;
private int month;
private int year;
public Date() {
}
public Date(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
public int getDay() {
return this.day;
}
public int getMonth() {
return this.month;
}
public int getYear() {
return this.year;
}
public void setDay(int day) {
day = enteredDay;
}
public void setMonth(int month) {
month = enteredMonth;
}
public void setYear(int year) {
year = enteredYear;
}
public String toString() {
return getDay() + "/" + getMonth() + "/" + getYear();
}
public boolean isEarlier(Date) {
if (enteredDay.getDay() < day) {
return true;
} else {
return false;
}
}
}
我无法使用最后一种方法。它必须是布尔值,如果日期早于它,则返回true。我的问题(至少据我所知)正在弄清楚该怎么写&#39;&lt;&#39;运营商。任何有关其余代码的反馈将不胜感激。
答案 0 :(得分:5)
我会过去一年,一个月和一天,然后依次对每一个进行比较,直到找到一对严格更早或更晚的对。
使用Comparator
,尤其是Java 8的简洁语法,可以为您节省大量的样板代码:
public boolean isEarlier(Date other) {
return Comparator.comparingInt(Date::getYear)
.thenComparingInt(Date::getMoth)
.thenComparingInt(Date::getDay)
.compare(this, other) < 0;
}
修改:
强>
要回答评论中的问题,您当然可以手动比较每个字段:
public boolean isEarlier(Date other) {
if (getYear() < other.getYear()) {
return true;
} else if (getYear() > other.getYear()) {
return false;
}
// If we reached here, both dates' years are equal
if (getMonth() < other.getMonth()) {
return true;
} else if (getMonth() > other.getMonth()) {
return false;
}
// If we reached here, both dates' years and months are equal
return getDay() < other.getDay();
}
这当然可以压缩到一个布尔语句,虽然它是否更优雅或更不优雅在旁观者的眼中(括号不是严格需要的,但恕我直言他们制作代码更清晰):
public boolean isEarlier(Date other) {
return (getYear() < other.getYear()) ||
(getYear() == other.getYear() &&
getMonth() < other.getMonth()) ||
(getYear() == other.getYear() &&
getMonth() == other.getMonth() &&
getDay() < other.getDay());
}
答案 1 :(得分:4)
如果您不想使用任何其他库,请尝试以下方法:
public boolean isEarlier(Date date) {
if (this.getYear() < date.getYear()) {
return true;
} else if (getYear() == date.getYear()
&& this.getMonth() < date.getMonth()) {
return true;
} else if (getYear() == date.getYear()
&& this.getMonth() == date.getMonth()
&& this.getDay() < date.getDay()) {
return true;
}
return false;
}
答案 2 :(得分:1)
您要求对您的代码提供反馈,所以这是
您的构造函数和设置方法决定了日期的值,您希望日期有效吗?
现在我可以这样做:
Date date = new Date(102, 17, -300);
它会被认为是好的。
如果您想要允许无效日期,请至少添加一个isValid方法
public boolean isValid();