2016-06-22 10 views
0

Ich versuche, eine App zu erstellen, die die Benutzereingabe eine Nummer und die App wird bestimmen, ob es eine Primzahl ist oder nicht haben werden. Hier ist mein Code:Warum einige Werte nicht für meinen Code funktionieren?

var arr: [Int] = [2, 3, 4, 5, 6, 7, 8, 9] 
let text = Int(textField.text!)! 
for x in arr { 
    if text == 1 { 
     iLabel.text = "NOT PRIME!" 
    } 
    else if x == 2 || x == 3 || x == 5 || x == 7 { 
     iLabel.text = "IT'S PRIME!" 
    } 
    else if text % x == 0 { 
     iLabel.text = "NOT PRIME!" 
     break 
    } 
    else if text % x != 0 { 
     iLabel.text = "IT'S PRIME!" 
     break 
    } 
} 

Zum größten Teil funktioniert dies. Wenn ich jedoch Variable "text" auf etwa 82 setze, ist das Ergebnis "IT'S PRIME!" obwohl es durch 2 teilbar ist ... kann jemand den Fehler in meinem Code erklären?

+3

Willkommen Überlauf Stack! Es klingt wie Sie lernen müssen, können, wie ein Debugger zu verwenden, durch den Code zu treten. Mit einem guten Debugger, können Sie ausführen r Programm Zeile für Zeile und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

Antwort

1
if text == 1 else if x == 2 else if text % x == 0 
    ^   ^   ^

es wird x=2 auslösen und setzen „ES IST PRIME` bevor es auf dem Scheck modulo/Rest erhält, die er dann überspringen wird. Es wird das gleiche in Schleife 3 auslösen, 5, 7.

82 ist nicht teilbar durch 8 oder 9, so wird es nicht den Rest Prüfung am Ende der Schleife und versehentlich Ausgabe des richtigen Wertes passieren auslösen, so dass „ITIS pRIME“ im Ausgabefeld, ohne tatsächlich zu prüfen, ob es Primes.

+0

Vielen Dank !! –