2016-09-30 3 views
3

Aus irgendeinem Grund erhält meine Funktion LinearSearch nur das erste Element des Arrays, das übergeben wird. Ich fand dies, indem ich einen Haltepunkt in die Funktion setzte und die Einheimischen betrachtete, die es hat, und ich weiß nicht warum es wird nur die 7 aus dem Array a bekommen. Der Testfall ich habe, ist folgendes (GoogleTest):Nur ein Element des Arrays wird in Funktion übergeben. 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)); 
} 

Hier ist meine LinearSearch Funktion:

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; 
    } 
} 

bin ich etwas fehlt? Muss ich theArray stattdessen als Referenz übergeben? Ich weiß nicht, warum nur der erste Wert an die Funktion übergeben wird.

Antwort

3

Sie kommen das erste Mal zurück.

Lösung oder eher ein Hinweis

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; 

Ihr Fall

Man denke nur an die Ausführung. Das erste Mal, wenn es etwas nicht findet, kehrt es sofort zurück und verlässt die Funktion. Daher sieht es nur ein Element.

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

aktualisieren

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

Nun, bekomme ich bin jetzt näher, aber ich bin ganz da noch nicht. Ich habe das 'return nullptr' außerhalb des Arrays verschoben und folgende Zeile hinzugefügt:' else if (key! = TheArray [i]) continue; ', aber es schlägt immer noch fehl ... gibt einfach nicht null zurück. – WitchKing17

+0

irgendwelche Ideen von hier? – WitchKing17

+0

Zuerst sollten Sie zurückkehren (theArray + i). (theArray) gibt nur einen Zeiger auf den Anfang des Arrays zurück, das Sie bereits haben. Sie benötigen keine zusätzliche else-Anweisung. Überprüfen Sie die Update-Sektion –

Verwandte Themen