2013-04-09 2 views
-1

Я пытаюсь получить последнюю дату, используя приведенный ниже код, но он идет в петлевой infinte и отображает ничего в консоли,, что случилось с этим кодом (.net 2.0)

public static void sortsortyMyDates() 
    { 
     int i = 1; 
     DateTime[] dtList = new DateTime[20]; 
     DateTime LatestDate = dtList[1]; 

     dtList[1] = Convert.ToDateTime("28/05/2013 13:00:00"); 
     dtList[2] = Convert.ToDateTime("23/04/2013 13:00:00"); 
     dtList[3] = Convert.ToDateTime("25/03/2013 13:00:00"); 
     dtList[4] = Convert.ToDateTime("08/04/2013 13:00:00"); 

     while(i < dtList.Length) 
     { 
      int result = DateTime.Compare(LatestDate, dtList[i]); 

      if (result < 0) 
       continue; 
      else 
       LatestDate = dtList[i]; 

      ++i; 
     } 

     Console.WriteLine(LatestDate.ToString()); 
    } 
+1

Определение "не работает", посмотрите на 'Max()'. – CodeCaster

+0

ничего не отображает, как в бесчисленном цикле – Mathematics

+0

Это экзамен? Я смущен. –

ответ

3

У вас есть проблемы с логикой петли:

if (result < 0) 
    continue; 

Если result < 0 тогда вы не увеличивают i, и поэтому цикл не прогрессирует.

Кроме того, ваше сравнение неверно. result < 0 будет означать, что текущая дата позже, чем текущий максимум. Причина, по которой вы получаете 01/01/0001 в качестве вывода, - это то, что вы используете текущий код, который на самом деле находит самую раннюю дату, и большая часть вашего массива не инициализирована (и, следовательно, намного раньше, чем ваши тестовые значения!).

Переключите if в этом вместо (и удалить else полностью):

if (result < 0) 
    LatestDate = dtList[i]; 
+0

вывод сейчас 01.01.10001 00:00:00 – Mathematics

+1

Это потому, что вы инициализировали его с помощью dtList [1], прежде чем назначить dtList [1] значение , Ergo по умолчанию будет DateTime.Min –

+0

Я положил его после инициализации, но все тот же результат – Mathematics

2

Если continue выполняется, i является больше не увеличивается, и цикл не заканчивается.

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