我正在实现我自己的Java类,用于在eclipse中对List<T>
进行排序。我在比较语句中提出了断点,并且它不起作用,因为我意外!
以下是代码:
if(doy2 < don && doy1>don)
{
return 1;
}
else if (doy2 > don && doy1<don)
{
return -1;
}
else
{
return 0;
}
即使doy2 > don && doy1<don
语句的计算结果为true,代码也达到return -1
,但它也会转到else部分并返回0.为什么呢?
编辑:完整代码
public class DateCompartor implements Comparator<BirthdayContact> {
@Override
public int compare(BirthdayContact arg0, BirthdayContact arg1) {
Date now=new Date();
Date bd1=arg0.GetBirthDay();
Date bd2=arg1.GetBirthDay();
DateTime dt1=new DateTime(bd1);
DateTime dtnow=new DateTime(now);
DateTime dt2=new DateTime(bd2);
int doy1=dt1.getDayOfYear();
int doy2=dt2.getDayOfYear();
int don=dtnow.getDayOfYear();
if(doy2 < don && doy1>don)
{
return 1;
}
else if (doy2 > don && doy1<don)
{
return -1;
}
else
{
return 0;
}
}
}
我将两个日期与当前日期进行比较,并且哪个日期更接近当前日期,应该在列表中显示上限。
答案 0 :(得分:1)
我会重建您的代码并再次执行它。您注意到的“古怪”可能是由于源和字节码不同步造成的。
我要求你发布整个Comparable实现。比较器通常比较两个对象,但您的比较语句似乎涉及三个。也许你可以准确地澄清你在做什么。
请放心,您的代码不正确。你有一个心理模型,说明这应该如何工作,但你的假设与现实不符。你的工作就是让他们恢复和谐。
更新:
鉴于新信息,我肯定不会按照您的方式编写代码。我会计算从每个日期到今天的时间差异并进行比较。我没有兴趣自己测试一下。看看这对你有好处。
public class DateCompartor implements Comparator<BirthdayContact> {
@Override
public int compare(BirthdayContact arg0, BirthdayContact arg1) {
Date now=new Date();
// Read Sun's Java coding standards; these don't follow the standard.
Date bd1=arg0.GetBirthDay();
Date bd2=arg1.GetBirthDay();
long dist1 = Math.abs(bd1.getTime() - now.getTime());
long dist2 = Math.abs(bd2.getTime() - now.getTime());
return dist1.compareTo(dist2); // Might need wrapper Long here.
}
}