2016-02-05 69 views
3

我是Swift的新手,對編程很新穎。我不確定是因爲它是上午2:34,但有人能幫我找出這兩個循環之間的區別嗎?'for index'和傳統'for循環'之間的區別

第一個是我想要使用的值(正如Swift文檔所解釋的)'傳統的C循環',其中一個使用了Swift首選的'for index'循環(我個人就像它對我來說更清楚一樣),問題是這個循環返回每個數字而不是滿足條件。

func findLargestPrimeFactor(number: Int) { 
    for var i = 2; i < number; i += i { 
     if number/i % 1 > 0 { 

     } else { 
      print(i); 
     } 
    } 
} 

findLargestPrimeFactor(13195); 

下面是每個數字返回13195

func findLargestPrimeFactor(number: Int) { 
    for i in 2...number { 
     if number/i % 1 > 0 { 

     } else { 
      print(i); 
     } 
    } 
} 

findLargestPrimeFactor(13195); 
+3

你的第一個功能,在每次迭代增加了'i'本身。第二個函數不會,它只是增加'i'。 – Moritz

+1

附註:'number/i%1> 0'沒有意義,因爲它從來都不是真的。您的函數都不計算給定數字的最大素數因子。 - 你在https://projecteuler.net/problem=3上工作嗎? :) –

+0

@MartinR你完全正確,我意識到這是因爲我提交了我的問題,但不想太早編輯它,直到我有解決方案。我覺得現在很愚蠢(就像我提到的那樣,它已經很晚了:p) –

回答

-1

我已經意識到我的錯誤是多麼愚蠢了,首先我不知道爲什麼我在做我+ =我,只是沒沒有任何意義。

此外,我的條件永遠不會被滿足,因爲我宣佈它爲一個Int時,我真的需要一個浮點數,因爲我關心的剩餘部分!

編輯:我已經再次更新我的代碼(考慮到每個人的反饋),我覺得這一點更好一點,並將繼續在解決方案上工作。

感謝大家的幫助!

更新代碼

func findLargestPrimeFactor(number: Int) { 
    for i in 2...number { 
     var n = Float(number) 
     var count = Float(i) 
      if n/count % 1 > 0 { 
       print("not divisible") 
      } else { 
      print(i) 
     } 
    } 
} 

findLargestPrimeFactor(13195); 
+1

不要在for循環中使用浮點數。要查看一個數字是否可以被另一個數字分隔,只需使用(數字%i == 0)。也不要使用C風格的循環,因爲它們將在下一個版本中從Swift中刪除。 –

相關問題