2013-03-25 2 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

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 = null и date2 > date3. number2 = 0 и number3 = 1. Затем я хочу установить значение как number3

Может кто-нибудь предложить мне способ справиться с тем, что я ищу?

+2

Это полностью зависит от приложения. Каков результат, который вы ожидаете увидеть, когда одно из ваших значений ввода равно нулю? – Gian

+0

Я предлагаю вам создать блок-схему с тем, какой вывод вы хотите для ввода, а затем написать код. – BobTheBuilder

ответ

2

Как вы обращаетесь с null находится в ведении вас.

Этот пример использует TreeMap для сортировки ваших пар ключ/значение на Date, а затем цикл в порядке убывания, пока не найдет ненулевое значение.

Эта реализация уменьшает значения 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

См. Пример в обновлении. Я смущен, только когда одна или несколько дат являются нулевыми. Если все равно null, я бы установил число как '-' – user525146

+0

. Я переопределил метод« TreeMap' put », чтобы игнорировать« null »- он не добавляется в« Карта »- это будет делать то, что вы хотите. –

+0

Это работает как шарм. Большое спасибо ! – user525146

Смежные вопросы