2012-02-26 43 views
-1

我实现我自己的Java类为食分选List<T>。我在比较陈述中做出了突破点,并且它不起作用,因为我意想不到!Java的比较<T>给人意想不到的结果

下面是代码:

if(doy2 < don && doy1>don) 
     { 
      return 1; 
     } 
     else if (doy2 > don && doy1<don) 
     { 
      return -1; 
     } 
     else 
     { 
      return 0; 
     } 

即使doy2 > don && doy1<don语句评估为真,代码达到return -1,但它也去其他部分并返回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

你的代码段是非常不完整。另外,究竟是什么奇怪的?你给了什么输入,你得到了什么输出? – jlemos 2012-02-26 16:30:23

+0

什么是输入和预期输出以及实际输出? – 2012-02-26 16:30:57

+0

“doy”==“一年中的哪一天”?什么是“不”? – duffymo 2012-02-26 16:31:16

回答

1

我会重建你的代码,并再次通过它。您注意到的“怪异”可能是由于源和字节码不同步造成的。

我问您发布整个可比实现。比较器通常比较两个对象,但是您的比较语句似乎涉及三个对象。也许你可以明确地说明你在做什么。

请确保您的代码不正确。你有一个思维模式,应该如何工作,但是你的假设与现实不符。你的工作是让他们恢复和谐。

UPDATE:

鉴于新的信息,我肯定不会编写它你的方式。我会计算从每个日期到今天时间的差异并比较这些差异。我没兴趣去测试它自己。看看这对你是否更好。

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. 

    } 

} 
+0

我刚编辑了代码。我将两个日期与当前日期进行比较,哪个更接近当前日期,应该在列表中位于上方。 – 2012-02-26 16:47:48

+0

我只处理了这段代码中的日期和时间。 getTime()足以解决我的问题吗? – 2012-02-26 17:37:15

+0

我只是用你的方式与DateTime(org.joda.time.DateTime)类,它的工作。谢谢。我希望有人会删除我的问题的否定。 – 2012-02-26 17:49:07

相关问题