Wo liegt der Fehler in meinem JavaScript 'Programm'?

... komplette Frage anzeigen

3 Antworten

Dein Algorithmus sieht reichlich kompliziert aus (wo hast du den her?), ob der so funktioniert, weiß ich nicht. Beispielsweise könntest du mit einem

if (x < 2) {

return false;

}

am Anfang der Funktion die beiden Bedingungen massiv vereinfachen. Davon mal abgesehen gibt die Funktion nix zurück (es fehlt das return) und endprims.length ist immer 0. Immer endprims-Array wiederum ist allerdings nie ein Element drin.

Wie äußert sich denn "funktioniert nicht" in dem Programm? Rechnet die Funktion gar nicht oder erkennt sie keine / falsche Primzahlen?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von ralphdieter
27.04.2016, 09:34

Wie äußert sich denn "funktioniert nicht"

Die Funktion probiert alle Zahlen von 2 bis ca. x/2. "Manchmal" legt sie ihr Argument x in ein Array, wirft dieses gleich wieder weg und bricht ab. Manchmal auch nicht.

"Manchmal" heißt: Wenn x>2 ist und eine Zahl ≤x/2 existiert, die kein Teiler von x ist. Vermutlich gilt das für die 5 und alle Zahlen ab 7. Ist aber egal, weil die Funktion so oder so nix zurück gibt :-)

0
  • var endprims=[]; gehoert vor die Schleife, sonst wird das Array jedesmal geloescht
  • endprims[endprims.length]=x; ist gekuenstelt. Ein Programm sollte klar beschreiben was es tut. Daher lieber endprims.push(x);
  • Der Fall x==1 muss vor der Schleife abgefragt werden. Sonst wird das Programm langsam und unübersichtlich.
  • Der Fall x==2 braucht keine Sonderbehandlung.
  • Einen logischen Fehler gibt es allerdings auch !(x%n==0). Das Gegenteil ist gefordert: Die Schleife sollte abbrechen sobald n Teiler von x (Zahl ist nicht Prim) oder n>x/2 (Zahl ist Prim).
Antwort bewerten Vielen Dank für Deine Bewertung

Dir ist schon klar, dass das Array außerhalb der for loop liegen sollte? Und mach doch deine for Loop nicht so kompliziert...

Letzter Punkt, keine Semikolons nach einer Function-Definition.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?