2016-07-11 41 views
-1

Ich habe eine Funktion geschrieben, die derzeit alle Primzahlen unter 1000 anzeigt. Ich kann 1000 größer machen, um mehr Zahlen zu erzeugen, aber ich weiß nicht, wie ich es machen soll mach weiter für immer laufen.Wie man eine Swift-Schleife unendlich lange laufen lässt

Hier ist meine aktuellen Code:

func generatePrimes() { 

let numbers = 2...1000 
for n in numbers { 

var prime = true 

for i in 2..<n { 
    if n % i == 0 { 
     prime = false 
     break 
    } 
} 

if prime == true { print(n) } 
} 
} 
+0

........... während true –

+3

Wenn Sie es für immer laufen lassen, könnte Ihr Compiler möglicherweise einen Laufzeitfehler bekommen oder Sie werden einfach keine Ausgabe sehen. Warum wollen Sie gerade solch ein nutzloses Ding machen? –

+2

@VaibhavBajaj dies ist einfach nicht wahr, da die Ausgabe während jeder Iteration generiert wird. Was das OP will, ist in keiner Weise nutzlos. Warum haben Sie Ihre Antwort übrigens gelöscht und als Kommentar gepostet, nachdem ich sie abgelehnt habe? –

Antwort

2

Sie eine while Schleife mit dem Argument true sein nutzen könnten. Auf diese Weise würde die Schleife niemals enden.

func generatePrimes() { 
    var n = 2 
    while true { 
     var prime = true 

     for i in 2..<n { 
      if n % i == 0 { 
       prime = false 
       break 
      } 
     } 

     if prime == true { 
      print(n) 
     } 

     n += 1 
    } 
} 

beachte, dass wir eine Variable verwenden (n) und increment (1 hinzufügen, um es) bei jeder Iteration der while-Schleife.

Wenn Sie es enden soll, wenn es etwas n trifft, können Sie eine bedingte haben, dass die Kontrollen gegen n und break ‚s aus der Schleife.

func generatePrimes() { 
    var n = 2 
    while true { 
     if n == 1000 { 
      break 
     } 

     var prime = true 

     for i in 2..<n { 
      if n % i == 0 { 
       prime = false 
       break 
      } 
     } 

     if prime == true { 
      print(n) 
     } 

     n += 1 
    } 
} 

Der obige Code wird die Ausführung zu stoppen, wenn n Treffer 1000 und alles, was nicht für diesen Fall gedruckt werden.

+0

Sie können Ihre Codequalität verbessern, indem Sie Anweisungen wie 'if prime == true' und sie durch' if prime' ersetzen, um die Lesbarkeit und Wartbarkeit Ihres Codes zu verbessern. –

+0

Altho ist es schön, das Schlüsselwort 'break' zu lernen, in diesem Fall wäre es eine schlechte Verwendung. 'while true' sollte auf' while n! = 1000' gesetzt werden – Antzi

0

Verwenden Sie eine while Schleife statt for Schleife. Es kann auch mit einer for Schleife durchgeführt werden, aber for Schleife wird bevorzugt, wenn Sie die Anzahl oder den Bereich der Iterationen kennen, die Sie ausführen. Wenn Sie eine while-Schleife verwenden, müssen Sie nur die Bedingung für die Schleife festlegen. In diesem Fall müssen Sie die Bedingung als wahr angeben, da die Schleife für immer ausgeführt werden soll.

Ersetzen Sie einfach Ihre for Schleife in Ihrem Code mit while. Es sollte in etwa so aussehen

while(true) 
{ 
    if n % i == 0 { 
     prime = false 
     break 
    } 
} 
+1

Bitte erweitern Sie Ihre Antwort. –

+0

@returntrue aktualisiert – ebby94

+1

Sie müssten "n" erhöhen. Schließlich werden sie einen ganzzahligen Überlauf bekommen – Paulw11

-2
func generatePrimes() { 

    var prime = true 

    let numbers = 2...1000 
    for n in numbers { 

     prime = true 

     if n == 2 || n == 3 { 
      print(n) 
     } else { 
      for i in 2..<n-1 { 
       if n % i == 0 { 
        //not prime numbers 
        prime = false 
       } 
      } 
      if prime == true { 
       print(n) 
      } 
     } 
    } 
} 

Sie können es so machen. Schließen Sie einfach 1 und n aus.