2015-08-04 3 views
0

У меня есть функция, которая принимает массив вместе со случайными значениями индекса головы и хвоста. Я пытаюсь пройти весь массив назад от значения хвоста до значения головы, но кажется, что некоторые значения пропускаются.Перемещение назад через массив со случайным началом и концом

Вот моя логика:

currentRec = tail; 

while (currentRec != head) 
{ 
    // get current record from array and do stuff (i.e. myArray[currentRec]) 


    if (currentRec == 0) 
    { 
     currentRec = MAX_RECORDS - 1; // MAX_RECORDS is 200 
    } 
    else 
    { 
     currentRec--; 
    } 
} 

Что я упускаю или делаю неправильно?

+0

Теперь самое время начать изучать, как использовать ваш отладчик. –

+0

Укажите ___ [MCVE] (http://stackoverflow.com/help/mcve) ___ –

+0

Как написано, код верен. Это предполагает, что вы говорите о стандартных массивах, и все эти переменные являются положительными целыми числами. – Banex

ответ

2

Ваша петля не обрабатывает конечный элемент по индексу head. Если вы хотите, чтобы обработать все элементы из tail до headвключительно, то вам необходимо изменить логику немного:

currentRec = tail; 

while (1) 
{ 
    // get current record from array and do stuff (i.e. myArray[currentRec]) 

    if (currentRec == head) // if we've just processed the last (i.e. head) element 
    { 
     break;    // exit loop 
    } 

    if (currentRec == 0)  // otherwise bump currentRec and repeat... 
    { 
     currentRec = MAX_RECORDS - 1; // MAX_RECORDS is 200 
    } 
    else 
    { 
     currentRec--; 
    } 
} 


UPDATE

Если у вас есть дополнительное требование о том, когда head == tail то вы хотите обработать все элементы массива, тогда вам нужно добавить немного больше логики:

currentRec = tail; 
done = false; 

while (1) 
{  
    // get current record from array and do stuff (i.e. myArray[currentRec]) 

    if (done)   // if we've just processed the last (head) record 
    { 
     break;   // exit loop 
    } 

    if (currentRec == 0) 
    { 
     currentRec = MAX_RECORDS - 1; // MAX_RECORDS is 200 
    } 
    else 
    { 
     currentRec--; 
    } 

    if (currentRec == head) 
    { 
     done = true; // set flag to indicate that the next iteration will be the last 
    } 
} 
Смежные вопросы