2013-03-25 20 views
0

我有3个日期和3号返回一个值,同时考虑到的日期和数字

Date date1 = "2013-01-23"; 
Date date2 = "2013-03-24"; 
Date date3 = "2012-12-20"; 

number1 = 10; 
number2 = 0; 
number3 = 3; 

第1步:我要检查这三个我的最新日期和选择对应于该日数。

第2步:如果对应于该日期的数字是0,我需要的三个日期中下一个最高值

注:日期可以null

我的代码工作,如果所有的日期不为null。我很困惑,以处理案件时的日期一个是null

if(date1 != null && date3 != null) { 
    if(date1.compareTo(date3) > 0 && number1 > 0) { 
    dateCompare = date1; 
    object.set(number1); 
    } else if(date3.compareTo(date1) > 0 && number3 > 0) { 
     dateCompare = date3; 
     object.set(number3); 
    } 
} 

if(date2 != null) { 
    if(dateCompare != null) { 
    if(date2.compareTo(dateCompare) > 0 && number2 > 0) { 
     object.set(number2); 
     dateCompare = date2; 
    } 
    } 
} 

UPDATE

例如,如果日期一个是null 如果date1 = nulldate2 > date3number2 = 0number3 = 1。然后我想设置为number3

有人可以建议我一种方法来处理我在找什么?

+2

这完全取决于应用程序。当您的某个输入值为空时,您希望看到的输出是什么? – Gian 2013-03-25 22:20:51

+0

我建议你用什么输出创建一个流程图,用于输入什么,然后编写代码。 – BobTheBuilder 2013-03-25 22:27:20

回答

2

你如何处理null是完全由你决定的。

本示例使用TreeMapDate对您的键/值对进行排序,然后按降序循环,直至找到非零值。

该实施方式会降低null值,因为它们无法进行有意义的排序。从OP的例子来看,这似乎是正确处理null的方法。剩下的唯一问题是如果一切都是null该怎么办。

private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

public static void main(String[] args) { 
    final TreeMap<Date, Integer> map = new TreeMap<Date, Integer>() { 
     @Override 
     public Integer put(Date key, Integer value) { 
      if (key != null) { 
       return super.put(key, value);     
      } 
      return null; 
     } 
    }; 
    map.put(parseDate("2013-01-23"), 10); 
    map.put(parseDate("2013-03-24"), 0); 
    map.put(parseDate("2012-12-20"), 3); 
    for (final Entry<Date, Integer> entry : map.descendingMap().entrySet()) { 
     if (entry.getValue() > 0) { 
      System.out.println(entry + " has nonzero value"); 
      break; 
     } 
     System.out.println(entry + " has zero value. Continue looking."); 
    } 
} 

public static Date parseDate(final String date) { 
    if (date == null) { 
     return null; 
    } 
    try { 
     return dateFormat.parse(date); 
    } catch (ParseException ex) { 
     ex.printStackTrace(System.out); 
     return null; 
    } 
} 

输出:

Sun Mar 24 00:00:00 GMT 2013=0 has zero value. Continue looking. 
Wed Jan 23 00:00:00 GMT 2013=10 has nonzero value 

我会使用TreeMap,而不是您的自定义代码当然建议,它更清晰你的代码的其他读者。任何为什么重新发明轮子?

+0

请参阅更新中的示例。只有当一个或多个日期为空时,我才感到困惑。如果一切都为空,我会将数字设置为'-' – user525146 2013-03-25 22:49:56

+0

我已经重写了'TreeMap' put方法来忽略'null' - 它不会被添加到'Map' - 这会做你想做的。 – 2013-03-25 22:51:03

+0

这工作就像一个魅力。非常感谢你 ! – user525146 2013-03-26 03:44:43

相关问题