2015-02-22 6 views
16

Sayının bir sayı faktörü olup olmadığını kontrol eden bir for döngüsüm var, sonra bu faktörün asal olup olmadığını kontrol eder ve sonra bir diziye ekler. Orijinal sayısına bağlı olarak, benNeden Swift döngüsüm hata veriyor "sonu <start" ile aralık oluşturulamıyor?

fatal error: Can't form range with end < start

Bu hemen hemen her zaman olur belirten bir hata alırsınız, ancak bazı sayılar için iyi çalışıyor. kod 9, 15, ve burada

25. vardır ile bulduğum tek sayılar çalışmaktır: İkinci döngüde

let num = 16 // or any Int 
var primes = [Int]() 

for i in 2...(num/2) { 

    if ((num % i) == 0) { 
     var isPrimeFactor = true 

     for l in 2...i-1 { 
      if ((i%l) == 0) { 
       isPrimeFactor = false; 
      }//end if 
     }//end for 

     if (isPrimeFactor == true) { 
      primes.append(i) 
     }//end if 

    }//end if 

}//end for 

cevap

9

, i hep 'teşekkür anlamına gelen 2'de başlayacak dinamik değer aralığı ile bir döngü gerekiyorsa 2...1

+0

Ama nasıl bazı sayılar fakat başkalarıyla çalışır geldi? – lagoon

+2

bu üç sayı tekdir, bu yüzden "num% i" koşulu yanlıştır. – chris

+0

Peki bunu nasıl düzeltirim? Eğer 1'de başlayacak olursam, herhangi bir normal programlama dilinde "primes" – lagoon

26

itibaren döngü yeniden, ben stride(to:by:) yerine o Temelde ..<

..< veya ... kullanarak düşündürmektedir start_index > end_index ise ... çökecektir.

Ör:

let k = 5 
for i in 10...k { print("i=\(i)") } 
for i in 10..<k { print("i=\(i)") } 

Nasıl düzeltilir

// swift 2.3 
let k = 5 
for i in 10.stride(to: k+1, by: 1) { print("i=\(i)") } 
for i in 10.stride(to: k, by: 1) { print("i=\(i)") } 

// swift 3.0 
let k = 5 
for i in stride(from: 10, through: k, by: 1) { print("i=\(i)") } 
for i in stride(from: 10, to: k, by: 1) { print("i=\(i)") } 

Not: yukarıdaki 2 blok şey çıktısını olmayacak, ama bunlardan biri yürütüldüğünde çöktü edilecektir.

Referans:

+3

"by" parametresi (-1) olmalıdır veya hiçbir şey yazdırılmayacaktır – igrrik

+1

@igrrik: Lütfen dikkatlice okuyun. Ölümcül hata sebebinden bahsediyoruz .. nahung89

İlgili konular