2015-04-20 55 views
0

我想把斐波那契數字放在一個數組中,並希望看到操場控制檯中的數組輸出,但由於某種原因,我沒有看到任何輸出。有人可以幫助我理解我在程序中犯的錯誤嗎?在雨燕遊樂場沒有輸出

import UIKit 

class FibonacciSequence { 

    let includesZero: Bool 
    let values: [Int] 

    init(maxNumber: Int, includesZero: Bool) { 
     self.includesZero = includesZero 
     values = [0] 
     var counter: Int 
     if (includesZero == true) { counter = 0 } 
     else { counter = 1 } 
     for counter <= maxNumber; { 
      if (counter == 0) { 
       values.append(0) 
       counter = 1 
      } 
      else { 
       counter = counter + counter 
       values.append(counter) 
      } 
     } 
     println(values) 

    } 

    println(values) 
    return values 
} 

let fibanocciSequence = FibonacciSequence(maxNumber:123, includesZero: true) 

回答

2

@ABakerSmith給你的代碼中存在的問題一個很好的破敗原樣,但你也可能要考慮,而不是初始化數組成員變量類,寫一個SequenceType返回斐波那契數:

struct FibonacciSequence: SequenceType { 
    let maxNumber: Int 
    let includesZero: Bool 

    func generate() -> GeneratorOf<Int> { 
     var (i, j) = includesZero ? (0,1) : (1,1) 
     return GeneratorOf { 
      (i, j) = (j, i+j) 
      return (i < self.maxNumber) ? i : nil 
     } 
    } 
} 

let seq = FibonacciSequence(maxNumber: 20, includesZero: false) 

// no arrays were harmed in the generation of this for loop 
for num in seq { 
    println(num) 
} 

// if you want it in array form: 
let array = Array(seq) 

你當然可以記憶序列,如果你想提高多代人的表現。

1

你的問題是你的代碼有錯誤;如果代碼中存在錯誤遊樂場將無法運行它,並且您將無法獲得任何輸出。

  • for counter <= maxNumber;你已經有了一個分號行,還可以,我敢肯定你不能聲明for循環那樣,除非我失去了一些東西?儘管你可以使用while循環。

  • 你爲什麼想從init方法中返回values

  • 您已將values聲明爲常量,但會嘗試使用append對其進行更改。

  • 使用此代碼和固定表示不產生Fibonacci序列中的錯誤,而不是它產生:[0, 0, 2, 4, 8, 16, 32, 64, 128]

試試這個代碼:

class FibonacciSequence { 
    let values: [Int] 

    init(maxNumber: Int, includesZero: Bool) { 
     var tempValues = includesZero ? [0] : [1] 
     var current = 1 

     do { 
      tempValues.append(current) 

      let nMinus2 = tempValues[tempValues.count - 2] 
      let nMinus1 = tempValues[tempValues.count - 1] 

      current = nMinus2 + nMinus1 

     } while current <= maxNumber 

     self.values = tempValues 
    } 
} 

然後創建一個實例:

let fibanocciSequence = FibonacciSequence(maxNumber:123, includesZero: true) 
println(fibanocciSequence.values) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] 

希望有幫助!

+0

無需強制拆包「最後」 - 可選項可以與非可選項進行比較。 –

+0

乾杯,我已經通過回答修改。 – ABakerSmith