Java Comparator <t>给出意外结果</t>

时间:2012-02-26 16:27:45

标签: java

我正在实现我自己的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;
        }
    }
}

我将两个日期与当前日期进行比较,并且哪个日期更接近当前日期,应该在列表中显示上限。

1 个答案:

答案 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.

    }

}