2016-09-30 7 views
3

По какой-то причине моя функция LinearSearch получает только первый элемент массива, который проходит. Я нашел это, поставив точку останова в функции и посмотрев на локали, которые у нее есть, и я не знаю, почему это только получение 7 из массива a. Тест у меня есть следующие (GoogleTest):Только один элемент массива передается в функцию. C++

TEST(LinearSearch, ElementExists2Items) { 
    // LinearSearch should return a pointer to the item if it exists in the array. 
    int a[2] = {7, 2}; 
    EXPECT_EQ(a, LinearSearch(a, 2, 7)); 
    EXPECT_EQ(a + 1, LinearSearch(a, 2, 2)); 
} 

Вот моя LinearSearch функция:

int* LinearSearch(int theArray[], int size, int key) { 
    if (size == 0) 
     return nullptr; 

    for (int i = 0; i < size; i++) { 
     if (key == theArray[i]) 
      return (theArray); 
     else 
      return nullptr; 
    } 
} 

ли я что-то отсутствует? Нужно ли передавать theArray по ссылке? Я не знаю, почему это только первое значение, переданное в функцию.

ответ

3

Вы возвращаетесь в первый раз.

решение или скорее намек

for (int i = 0; i < size; i++) { 
    if (key == theArray[i]) 
     return (theArray); 
    //if it cannot find it the very first time, it returns null IN YOUR CASE :) 
} 
return nullptr; 

Ваш случай

Просто думать о выполнении. В первый раз он не находит что-то, что он немедленно возвращает и выходит из функции. Следовательно, он видит только один элемент.

for (int i = 0; i < size; i++) { 
     if (key == theArray[i]) 
      return (theArray); 
     else 
      return nullptr; 
    } 

Update

for (int i = 0; i < size; i++) { 
    if (key == theArray[i]) 
     return (theArray + i); 
    // you currently pass the pointer to the start of the array again and again. Pass the pointer to the element instead. 
} 
return null; 
+0

Ну, теперь я все ближе, но я до сих пор не совсем там. Я переместил 'return nullptr' за пределы массива и добавил эту строку:' else if (key! = TheArray [i]) continue; ', но он все равно не работает ... просто не возвращает значение null. – WitchKing17

+0

любые идеи отсюда? – WitchKing17

+0

Во-первых, вы должны вернуться (theArray + i). (theArray) возвращает только указатель на начало массива, который у вас уже есть. Вам не нужна дополнительная инструкция else. Проверьте раздел обновления –

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

  • Нет связанных вопросов^_^