zoukankan      html  css  js  c++  java
  • Welcome to Swift (苹果官方Swift文档初译与注解三十)---219~224页(第四章-- 流程控制 完)

    Labeled Statements  (标签语句)

      循环或者switch语句可以嵌套其他的循环或者switch,这样在Swift中可以创建复杂的流程控制结构.循环或者switch语句都可以通过break语句来永久的结束,因此,有时候需要显式的  表明在循环或者switch中你需要break的语句.同样的,如果你嵌套多个循环,显式的表明里面的continue语句也是类似的.

      为了达成这个目标,可以在循环语句或者switch语句中使用一个语句标签(statement label),利用这个标签和break或continue语句来结束或者继续执行标签的语句.

      一个标签语句的写法是在相同语句行使用label关键字后,再跟一个冒号(:),下面是一个while循环的例子,这个例子对于switch语句和其他所有循环都是相同的规则:

      label name: while condition {

          statements

      }

      下面的例子通过在标记的while循环中使用break和continue语句来实现蛇和梯子游戏的改进版本,并且游戏添加了一个扩展的规则:

      必须到达格子25才获胜.

      如果你投掷色子超过了格子25,你必须重新再投掷直到你准确的到达格子25

      游戏的格子与之前是一样的:

    pastedGraphic.pdf

      值finalSquare, board, square, 和diceRoll的初始化也与之前一样:

        let finalSquare = 25

        var board = Int[](count: finalSquare + 1, repeatedValue: 0)

        board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02

        board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08

        var square = 0

        var diceRoll = 0

      这个版本的游戏使用while循环和一个switch语句来完成游戏逻辑.while循环有一个标记语句gameLoop,是为了说明它是游戏的主要循环.

      while循环的条件是while square != finalSquare,这个表示你必须达到格子25:

        gameLoop: while square != finalSquare {

            if ++diceRoll == 7 { diceRoll = 1 }

            switch square + diceRoll {

            case finalSquare:

                // diceRoll will move us to the final square, so the game is over

                 break gameLoop

            case let newSquare where newSquare > finalSquare:

                 // diceRoll will move us beyond the final square, so roll again

                continue gameLoop

             default:

                // this is a valid move, so find out its effect

                square += diceRoll

                square += board[square]

             }

        }

        println("Game over!")

      在每次循环的是时候都投掷色子,而不是立刻移动玩家.switch语句用来处理移动结果并计算移动:

      •   如果投掷色子后,玩家移动到最后的格子,游戏结束.语句break gameLoop语句跳转控制到while循环外的第一行代码,它结束游戏.
      •   如果投掷色子后,玩家移动超过最后的格子,移动不成立,玩家需要再次投掷,continue gameLoop语句结束当前while循环并且开始一次循环遍历.
      •   所有的其他情况,投掷色子移动,玩家向前移动diceRoll个格子,游戏逻辑上检查蛇和梯子,然后循环结束,控制返回到while条件判断,来决定是否进行一下个循环.

      注意点:

      如果break语句没有使用gameLoop标记,它将只跳出switch语句,而不是while语句.使用gameLoop标记可以清晰的表明将要结束的控制语句.

      同时,在调用continue gameLoop语句跳转到下一次循环,使用gameLoop标记并不是严格要求的.游戏中只有一个循环,因此不会continue语句不会有模棱两可的情况.但是使用了    gameLoop标记continue语句依然是无害的.这么做的原因是对比break语句,并且帮助游戏逻辑清晰,增加可读性和易于理解.

  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/caios/p/3836496.html
Copyright © 2011-2022 走看看