解释下这个java程序中的三目运算

来源:百度知道 编辑:UC知道 时间:2024/04/30 18:27:09
class Date {
int year, month, day;

Date(int y, int m, int d) {
year = y; month = m; day = d;
}

public int compare(Date date) {
return year > date.year ? 1
: year < date.year ? -1
: month > date.month ? 1
: month < date.month ? -1
: day > date.day ? 1
: day < date.day ? -1 : 0;
}

public String toString() {
return "Year:Month:Day -- " + year + "-" + month + "-" + day;
}
}

这是一个冒泡排序程序的局部,compare方法用作两个日期的比较用,但是我看不懂那个三目运算的结构,只知道比较后大于返回1,小于返回-1. 请明白的人仔细说一下为什么是这样写的??

我不太明白你不清楚些什么,我只是猜想你对条件赋值语句不太清楚(:?)我把你上面的方法改写成if else的格式你看看吧。
public int compare(Date date) {
if(this.year>date.year){
return 1;
}else if(this.year<date.year){
return -1;
}else if(this.month>date.month){
return 1;
}else if(this.month<date.month){
return -1;
}else if(this.day>date.day){
return 1;
}else if(this.day<date.day){
return -1;
}else{
return 0;
}
}

这个方法与你上面写的方法是等价的。

先比较年分大小
year > date.year 成立,返回1;
若不成立,即year <= date.year,接着判断year < date.year是否成立,若成立返回-1;
若还不成立,这时 year == date.year,那么接着比较月分大小,下面不需要解释了吧,跟前面年份的比较一模一样。

这跟我们平常比较日期的方法一样的,先比较年份,年份一样在比较月,月一样比较日期。对于题中方法,若都一样返回的是0。

我觉得这样更容易理解:
public int compare(Date date) {
return year > date.year ? 1
: (year < date.year ? -1
: (month > date.month ? 1
: (month < date.month ? -1
: (day > d