zoukankan      html  css  js  c++  java
  • Scala入门系列(二):条件控制与循环

    条件控制与循环

    if表达式

    • 定义:if表达式是有值的,就是if或者else中最后一行语句返回的值。
      • 例如:val isAdult = if (age > 18) 1 else 0
    • 类型推断:由于if表达式是有值的,而if和else子句的值类型可能不同,此时if表达式是什么类型呢?Scala会自动取两个类型的公共父类型。
      • 如果if后没有跟else,则默认else的值是Unit,也用()表示,类似java中的void或者null。
    • 写多行if语句:可以使用{}的方式,但推荐使用:paste和ctrl + D的方式。

    终结符

    默认情况下scala不需要终结符; 因为默认一行一句,但是如果你想在一行写多句,那么必须使用; 隔断,其次可以使用{}来进行块编码。

    缩进

    官方推荐代码缩进为2个空格,因为Scala代码很容易陷入很深的嵌套层级,如果有更多空格的话代码很容易就超出屏幕右边界。

    循环

    • while do:语义与java相同
    • for:只有简易版for语句
      • 例如:var n = 10; for(i <- 1 to n) println(i)
      • 或者使用until,表示不达到上限: var n = 10; for(i <- 1 until n) println(i)
      • 也可以对字符串进行遍历,类似java的增强for循环: for (c <- "hello World") print(c)
    • 跳出循环语句
      • 没有类似于java的break语句
      • 但是可以使用bool、return或者Breaks的break函数来替代使用
    import scala.util.control.Breaks._
    breakable{
      var n = 10
      for(c <- "hello world"){
        if(n == 5) break;
        print(c)
        n -=1
      }
    }
    

    高级for循环

    • 多重for循环:九九乘法表
    for(i <- 1 to 9; j <- 1 to 9){
      if(j==9){
        println(i*j)
      }else{
        print(i*j + " ")
      }
    }
    
    • if守卫:for循环中可以添加if判断,例如:取偶数

      • for (i <- 1 to 100 if i % 2 == 0) println(i)
    • for推导式:构造集合, 类似于python中的列表解析式

    scala> var list = for(i<- 1 to 10) yield i
    list: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8
    , 9, 10)
    
  • 相关阅读:
    bzoj 3308 九月的咖啡店
    8.13模拟赛
    8.10模拟赛
    8.9模拟赛
    8.8模拟赛
    Codeforces Round #406 (Div. 2) D. Legacy (线段树建图dij)
    BZOJ 2957: 楼房重建 (分块)
    SPOJ BGSHOOT
    Codeforces Round #404 (Div. 2) E. Anton and Permutation(树状数组套主席树 求出指定数的排名)
    Lightoj-1356 Prime Independence(质因子分解)(Hopcroft-Karp优化的最大匹配)
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/8017407.html
Copyright © 2011-2022 走看看