<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          scala之for循環(huán)

          共 3718字,需瀏覽 8分鐘

           ·

          2021-06-21 08:46

          scala之for循環(huán)的幾種方式

          第一種

          i 表示循環(huán)的變量, <- 規(guī)定好 to 規(guī)定

          i 將會從 1-3 循環(huán), 前后閉合

          for(i <- 1 to 3){

            print(i + " ")

          }


          第二種

          這種方式和前面的區(qū)別在于 i 是從1 到 3-1

          前閉合后開的范圍,和java的arr.length() 類似

          for(i <- 1 until 3) {

            print(i + " ")

          }


          第三種(循環(huán)守衛(wèi))

          for(i <- 1 to 3 if i != 2) {

            print(i + " ")

          }


          這個代碼等價于

          for (i <- 1 to 3) {

                 if (i != 2) {

                        println(i+"")

                 }

          }


          第四種(引入變量)

          for(i <- 1 to 3; j = 4 - i) {

            print(j + " ")

          }

          沒有關鍵字,所以范圍后一定要加;來隔斷邏輯

          上面的代碼等價

          for ( i <- 1 to 3) {

            val j = 4 –i

            print(j+"")

          }


          第五種(嵌套循環(huán))

          for(i <- 1 to 3; j <- 1 to 3) {

            println(" i =" + i + " j = " + j)

          }

          上面的代碼等價于

          for ( i <- 1 to 3) {

              for ( j <- 1to 3){

                  println(i + " " + j + " ")

              }

           }


          第六種(循環(huán)返回值)

          將遍歷過程中處理的結(jié)果返回到一個新Vector集合中,使用yield關鍵字

          val res = for(i <- 1 to 10) yield i

          println(res)


          第七種(會用花括號代替小括號)

          {}和()對于for表達式來說都可以

          for 推導式有一個不成文的約定:當for 推導式僅包含單一表達式時使用圓括號,當其包含多個表達式時使用大括號

          當使用{} 來換行寫表達式時,分號就不用寫了

          for(i <- 1 to 3; j =  i * 2) {

            println(" i= " + i + " j= " + j)

          }


          注意

              scala中去掉了break和continue,所以需要專門的中斷語句去執(zhí)行

              break()函數(shù)替代break,用breakable()將代碼塊包起來,可以讓break()函數(shù)后的代碼可以繼續(xù)執(zhí)行

          循環(huán)守衛(wèi)替代continue

          import util.control.Breaks._

          object Demo {

            var n = 1;

            while (true){

              n += 1

              if (n === 18){

                //在scala中使用函數(shù)式的break函數(shù)中斷循環(huán)

                //def break(): Nothing = { throw breakException }

                //這樣就導致后面的代碼不會被執(zhí)行,這時可以用breakable去處理

                break();

              }

            }

          }


          import util.control.Breaks._

          object WhileBreak {

            def main(args: Array[String]): Unit = {

              var n = 1

              //breakable()函數(shù)

              //說明

              //1. breakable 是一個高階函數(shù):可以接收函數(shù)的函數(shù)就是高階函數(shù)

              //2. def breakable(op: => Unit) {

              //    try {

              //      op

              //    } catch {

              //      case ex: BreakControl =>

              //        if (ex ne breakException) throw ex

              //    }

              //  }

              // (1) op: => Unit 表示接收的參數(shù)是一個沒有輸入,也沒有返回值的函數(shù)

              // (2) 即可以簡單理解可以接收一段代碼塊

              // 3. breakable 對break()拋出的異常做了處理,代碼就繼續(xù)執(zhí)行

              // 4. 當我們傳入的是代碼塊,scala程序員會將() 改成{}

              breakable {

                while (n <= 20) {

                  n += 1

                  println("n=" + n)

                  if (n == 18) {

                    // 使用函數(shù)式的break函數(shù)中斷循環(huán)

                    break()

                  }

                }

              }

            }

          }


          使用循環(huán)守衛(wèi)終端

           var loop = true

          var sum2 = 0

          for (i <- 1 to 100 if loop == true) {

              sum2 += i

              if (sum2 > 20) {

                  println("循環(huán)守衛(wèi)實現(xiàn)中斷 第一次大于20的當前數(shù)=" + i)

                  loop = false

                }

                println("i=" + i)

          }


          使用循環(huán)守衛(wèi)控制步長

           for (i <- Range(1,10,2)){

                println(s"i=${i}")

           }

          for (i <- 1 to 10 if i % 2 == 1) {

              println("i=" + i)

          }


          總結(jié)

              scala 的for循環(huán)形式和java是較大差異,這點請注意,但是基本的原理還是一樣的。

          1、Scala里面沒有++  --的操作,如果非要實現(xiàn)類似的操作,那么使用的是 a -= 1操作

          2、for循環(huán)的語法是 (for <- 表達式/集合/數(shù)組,常用的表達式 1 to 10 或 1 until 10  )

          3、for循環(huán)支持多重for循環(huán),可以寫if條件表達式,并且表達式之前沒有分號

          4、for循環(huán)有返回值或者返回來一個新的集合在循環(huán)體前使用關鍵字yield

          5、for循環(huán)中斷用breakable高階函數(shù)


          歡迎關注全棧開發(fā)私房菜,每天進步一點點

          長按二維碼關注【全棧開發(fā)私房菜】



          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲精品视频无码 | 不用播放器在线观看A | 欧美激情四射 | 亚洲人妻无码在线 | 中,日韩欧美中文字幕 |