2016-09-30 5 views
3

어떤 이유로 든 내 함수 LinearSearch은 전달되는 배열의 첫 번째 요소 만 가져옵니다. 함수에 중단 점을 넣고 해당 지역의 객체를 보면이 사실을 알았습니다. 이유는 모르겠습니다. 배열 a에서 7 만 가져옵니다.배열의 한 요소 만 함수로 전달됩니다. 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; 
    } 
} 

내가 뭔가 실종 내가 가진 테스트 케이스는 다음 (GoogleTest)인가? 대신 참조로 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; 
    } 

업데이트

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 문은 필요하지 않습니다. 업데이트 섹션을 확인하십시오 –

관련 문제