Swift Playground没有输出

时间:2015-04-20 16:25:30

标签: ios swift swift-playground

我正在尝试将fibonacci数字放在一个数组中,并希望在游乐场控制台中看到数组输出但由于某种原因我没有看到任何输出。有人能帮助我理解我在程序中所犯的错误吗?

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 个答案:

答案 0 :(得分:2)

@ABakerSmith已经给出了代码中问题的一个很好的概述,但您也可能想要考虑,而不是初始化数组成员变量的类,编写一个返回fibonacci的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 :(得分:1)

您的问题是您的代码中存在错误;如果您的代码中存在错误,Playgrounds将无法运行它并且您无法获得任何输出。

  • for counter <= maxNumber;行上你有一个分号,但我也很确定你不能像for那样声明while循环那,除非我错过了什么?您可以使用values循环。

  • 您为什么要尝试从init方法返回values

  • 您已将append声明为常量,但之后尝试使用[0, 0, 2, 4, 8, 16, 32, 64, 128]更改它。

  • 使用此代码并修复所述错误不会产生Fibonacci序列,而是产生: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]

然后创建一个实例:

{{1}}

希望有所帮助!