迅速。用于循环迭代。

时间:2014-10-06 23:13:19

标签: swift

使用以下内容:

func isosceles(triangleSides: Int)
{
    var y = 0

    for _ in 1...triangleSides {
        y = y + 1

        var stringBuilder = String()

        for _ in 1...y
        {
            stringBuilder += "*"
        }            
        println(stringBuilder)          
    }


}

isosceles(3)

我可以制作以下模式:

*
**
***

我正在尝试编写一个输出高度为2n-1和宽度为n的横向三角形的函数,因此n = 4的输出将是:

*
**
***
**
*

func triangle(triangleSides: Int)
{
    var y = 0
    var x = 0
    var index: Int

    for _ in 1...triangleSides {
        y = y + 1

        var stringBuilder = String()

        for _ in 1...y
        {
            stringBuilder += "*"
        }

        println(stringBuilder + "\n")

    }

    for _ in 1..<triangleSides{
        x = triangleSides - 1


        var index: Int
        var stringBuilder = String()

        for index in stride(from: triangleSides - 1, through: 1, by: -1) {
            stringBuilder += "*"
        }


        println(stringBuilder + "\n")


    }
}

我得到了

*
**
***
**
**

显然,对我而言,这就是我试图做到这一点的问题。如果有人能指出我正确的方向,那将是值得赞赏的。

由于

2 个答案:

答案 0 :(得分:1)

嗯,你真的需要做的事情有很多......但是,你的主要问题是你的第3和第4 for个循环错了。

现在的样子,它在外循环中从1循环到triangleSides - 1,在内循环中循环triangleSize - 11。由于您没有使用for循环的实际索引,这只会使外循环和内循环运行triangleSides - 1次。

您要做的是从外部循环中的triangleSize - 1循环到1并将1循环到内循环中外循环的当前值。如果您让for循环完成其工作并直接分配x而不是忽略带有_的循环索引并手动计算{{{} {{}},则会更容易1}}。

这些更改看起来像这样(只是第二组x循环):

for

如果你想再清理一下,你也可以让for x in stride(from: triangleSides - 1, through: 1, by: -1) { var stringBuilder = String() for _ in 1...x { stringBuilder += "*" } println(stringBuilder + "\n") } 循环在第一组循环中完成它的工作并去除for的声明,{{1在函数开头的{}和x

y

现在,这个:

index

输出:

func triangle(triangleSides: Int)
{
    for y in 1...triangleSides {
        var stringBuilder = String()

        for _ in 1...y
        {
            stringBuilder += "*"
        }

        println(stringBuilder + "\n")

    }

    for x in stride(from: triangleSides - 1, through: 1, by: -1) {
        var stringBuilder = String()

        for _ in 1...x {
            stringBuilder += "*"
        }

        println(stringBuilder + "\n")
    }
}

答案 1 :(得分:1)

这是我的版本:

func triangle(triangleSides: Int)
{
    var y = 0
    var x = 0
    var index: Int
    var stringBuilder = ""

    for _ in 1...triangleSides {
        stringBuilder += "*"
        println(stringBuilder)
    }

    for z in reverse(1..<triangleSides) {
        let index = advance(stringBuilder.endIndex, -1)
        stringBuilder = stringBuilder.substringToIndex(index)
        println(stringBuilder)
    }
}

triangle(4)

输出:

*
**
***
****
***
**
*

评论。我认为双循环过于复杂。