2017-06-22 4 views
-2

Ich versuche, eine Funktion für die Suche nach dem maximalen Wert in einem Array zu schreiben, ohne dass C++ eingebauten Funktionen wie Art, max_element usw.C++: Funktion für Max Array Wert arbeitet nicht richtig

Ich habe dies entwickelt Code unten, und es entscheidet schließlich auf einem „Maximalwert“, aber es ist nicht immer richtig:

double dispMax(int farray[], int maxValue) 
{ 

    int max = farray[0]; 

    for (int x = 0; x < maxValue; x++) //maxValue is size of farray 
    { 

     if (farray[x] > max) 
     { 

      max = farray[x]; 
      return max; 

     } 

    } 

} 

Die Farray [] ist unsortiert, und besteht aus nur einer Liste von Datentypen (zB (123,25, 234,3 , 345,12)).

Manchmal scheint es, als ob es nicht sogar durch das gesamte Array iteriert, fast so, als ob es nur etwas findet, das es als Maximalwert betrachtet, und gibt dann sofort dieses zurück.

Auch wenn ich die Funktion anpassen, um stattdessen einen Mindestwert zu finden, bekomme ich ein ähnliches Ergebnis von fast FAST den Minimalwert, aber nicht ganz.

Jede Hilfe wird sehr geschätzt!

+1

'maxValue ist die Größe von farray' Großer Name! Wie auch immer, mit einem Debugger können Sie das leicht herausfinden. – juanchopanza

+1

Setzen Sie 'return max' aus der Schleife. Das ist alles. – skypjack

+1

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage so bearbeiten, dass sie ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel enthält, das Ihr Problem zusammen mit den Beobachtungen, die Sie im Debugger gemacht haben, reproduziert . –

Antwort

1

Die Rückkehr ist an einem falschen Ort

nehme an das Array 1 2 3

so max = 1;

Dann, wenn es für den zweiten Wert geht

Farray [1] = 2 ist es größer als 1, so zurückgeben (?)

Setzen Sie die Rückkehr außerhalb der for-Schleife, lassen Sie die Schleife durchlaufen alle Array

double dispMax(int farray[], int maxValue) 
{ 
    // need to be double 
    double max = farray[0]; 
    for (int x = 0; x < maxValue; x++) //maxValue is size of farray 
    { 
     if (farray[x] > max) 
     { 
      max = farray[x];  
     } 
    } 
    return max; 
}