我必须按用户输入的日期和时间对数组列表进行排序,但由于某种原因输出不按顺序
在此代码下方是我用来订购的代码
public int compareTo(Vehicle v){
int returnValue = 0;
if (this.parkDate.year> v.parkDate.getYear() &&
this.parkDate.month> v.parkDate.getMonth() &&
this.parkDate.day> v.parkDate.getDay() &&
this.parkDate.hours> v.parkDate.getHours() &&
this.parkDate.minuets> v.parkDate.getMinuets()){
returnValue = 1; }
else
returnValue = - 1;
return returnValue;
}
最佳答案
你的比较逻辑不正确。您可以使用 Integer.compare(int, int)
进行比较,并在非零的情况下返回
结果。比如,
public int compareTo(Vehicle v) {
int returnValue = Integer.compare(this.parkDate.getYear(),
v.parkDate.getYear());
if (returnValue != 0) {
return returnValue;
}
returnValue = Integer.compare(this.parkDate.getMonth(),
v.parkDate.getMonth());
if (returnValue != 0) {
return returnValue;
}
returnValue = Integer.compare(this.parkDate.getDay(),
v.parkDate.getDay());
if (returnValue != 0) {
return returnValue;
}
returnValue = Integer.compare(this.parkDate.getHours(),
v.parkDate.getHours());
if (returnValue != 0) {
return returnValue;
}
return Integer.compare(this.parkDate.getMinuets(),
v.parkDate.getMinuets());
}
或者,您可以使用数组和类似的东西来缩短上面的内容
int[] a = { this.parkDate.getYear(), this.parkDate.getMonth(),
this.parkDate.getDay(), this.parkDate.getHours(),
this.parkDate.getMinuets() };
int[] b = { v.parkDate.getYear(), v.parkDate.getMonth(),
v.parkDate.getDay(), v.parkDate.getHours(),
v.parkDate.getMinuets() };
for (int i = 0; i < a.length; i++) {
int rv = Integer.compare(a[i], b[i]);
if (rv != 0) {
return rv;
}
}
return 0;
最后,我相信您想要分钟而不是小步舞曲。
关于java - 对数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581501/