• Scala 基础(八):Scala 程序流程控制


    1.顺序控制

    顺序控制介绍

    程序从上到下逐行地执行,中间没有任何判断和跳转。

    顺序控制举例和注意事项

    复制代码; "复制代码")

    Scala中定义变量时采用合法的前向引用。如:
    def main(args : Array[String]) : Unit = {

        var num1 = 12 var num2 = num1 + 2 }

    错误形式:
    def main(args : Array[String]) : Unit = {

        var num2 = num1 + 2 var num1 = 12 }
    

    复制代码; "复制代码")

    2 分支控制if-else

    单分支

    基本语法

    if (条件表达式) {

    执行代码块

    }

    说明:当条件表达式为ture 时,就会执行 { } 的代码。

    单分支对应的流程图

    双分支

    基本语法

    if (条件表达式) {

    执行代码块1

    } else {

    执行代码块2

    }

    说明:当条件表达式成立,即执行代码块1,否则执行代码块2.

    双分支对应的流程图

    多分支

    基本语法

    if (条件表达式1) {

    执行代码块1

    } else if (条件表达式2) {

    执行代码块2

    } …… else {

    执行代码块n

    }

    多分支的流程图

     分支控制if-else 注意事项

    1)如果大括号{}内的逻辑代码只有一行,大括号可以省略, 这点和java 的规定一样。

    2)Scala中任意表达式都是有返回值的,也就意味着if else表达式其实是有返回结果的,具体返回结果的值取决于满足条件的代码体的最后一行内容.

    3)Scala中是没有三元运算符

    嵌套分支

    在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。嵌套分支不要超过3层

    基本语法 if(){       

          if(){

            }else{  

              }

    }

    3 for循环控制

    Scala 也为for 循环这一常见的控制结构提供了非常多的特性,这些for 循环的特性被称为for 推导式(for comprehension)或for 表达式(for expression)

    范围数据循环方式1

    for(i <- 1 to 3){

         print(i + " ")

    } println()

    说明

    i 表示循环的变量, <- 规定好 to 规定

    i 将会从 1-3 循环, 前后闭合 输出10句 "hello,尚硅谷!"

    范围数据循环方式2

    基本案例

    for(i <- 1 until 3) {

    print(i + " ")

    } println()

    说明:

    1)这种方式和前面的区别在于 i 是从1 到 3-1

    2)前闭合后开的范围,和java的arr.length() 类似

    for (int i = 0; i < arr.lenght; i++){}

    输出10句 "hello,尚硅谷!"

    循环守卫

    基本案例

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

    print(i + " ")

    }

    println()

    基本案例说明

    循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue

    上面的代码等价

    for (i <- 1 to 3) {

              if (i != 2) {

                      println(i+"")

               }

    }

    嵌套循环

    基本案例

    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 + " ")

               }

    }

    循环返回值

    基本案例

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

    println(res)

    将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字

    使用花括号{}代替小括号()

    基本案例

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

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

    }

    可以写成

    for{

        i <- 1 to 3

        j = i * 2

    } {

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

    }

    1){}和()对于for表达式来说都可以

    2)for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号

    3)当使用{} 来换行写表达式时,分号就不用写了

    注意事项和细节说明

    scala 的for循环形式和java是较大差异,这点请同学们注意,但是基本的原理还是一样的。

    scala 的for循环的步长如何控制! [for(i <- Range(1,3,2)]

    while循环控制

    基本语法

    循环变量初始化

    while (循环条件) {

    循环体(语句)

    循环变量迭代

    }

    注意事项和细节说明

    1)循环条件是返回一个布尔值的表达式

    2)while循环是先判断再执行语句

    3)与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的()

    4)因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在while循环的外部,

    那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用for循环。

    do..while循环控制

    基本语法

    循环变量初始化;

    do{

    循环体(语句)

    循环变量迭代

    } while(循环条件)

    注意事项和细节说明

    1)循环条件是返回一个布尔值的表达式

    2)do..while循环是先执行,再判断

    3)和while 一样,因为do…while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,

    而变量需要声明在do...while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用for循环

    while循环的中断

    Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数式的风格解决break和contine的功能,而不是一个关键字。

     

    如何实现continue的效果 Scala内置控制结构特地也去掉了continue,是为了更好的适应函数化编程,可以使用if – else 或是 循环守卫实现continue的效果

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

    println("i=" + i)

    }

  • 相关阅读:
    hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map
    hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)
    hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心
    hdu6441 Find Integer 求勾股数 费马大定理
    bzoj 1176 Mokia
    luogu 3415 祭坛
    bzoj 1010 玩具装箱
    bzoj 3312 No Change
    luogu 3383【模板】线性筛素数
    bzoj 1067 降雨量
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309039.html
Copyright © 2020-2023  润新知