2016-09-30 8 views
3

なんらかの理由で、私の関数LinearSearchは渡されている配列の最初の要素しか取得していません。関数にブレークポイントを置き、それが持つローカルを調べることでこれを見つけました。配列aからは7しか得られません。私が持っているテストケースは(GoogleTest)以下の通りです:ここでは配列の1つの要素だけが関数に渡されます。 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; 

あなたのケース

だけ実行について考えます。それがすぐに何かを見つけられないときはすぐに戻り、関数を終了します。したがって、それは1つの要素しか見ない。

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; '、しかしそれでも失敗します。 – WitchKing17

+0

ここから任意のアイデアですか? – WitchKing17

+0

まず、(theArray + i)を返す必要があります。 (theArray)は、すでに持っている配列の先頭へのポインタだけを返します。追加のelse文は必要ありません。更新セクションを確認してください –

関連する問題