第 4 章 程序流程控制

一、If … else … 语句

示例代码:

package com.lj.scala.main

import scala.io.StdIn

/**
  * @author Administrator
  * @create 2020-03-07 17:21
  */
object IfTest {

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

        var i = 0
        while (i < 7) {
            print("请输入姓名:")
            var name = StdIn.readLine()
            print("请输入年龄:")
            var age = StdIn.readInt()
            if (age > 0 && age < 18) {
                println(name + "年龄" + age + "岁,未成年!")
            } else if (age >= 18 && age <= 25) {
                printf("%s年龄%s岁,青年!\n", name, age)
            } else if (age > 25 && age < 35) {
                println(s"$name" + "年龄" + s"$age" + "岁,青壮年!")
            } else {
                // 嵌套分支
                if (age > 35 && age < 60) {
                    println(s"$name" + s"年龄$age" + ",中老年!")
                } else if (age >= 60 && age <= 80) {
                    println(s"$name" + s"年龄$age" + ",老年!")
                } else (
                    printf("%s年龄%s,吉祥老人!\n", name, age)
                )
            }
            i += 1
        }

    }
}
========================运行结果====================================
请输入姓名:Jack
请输入年龄:13
Jack年龄13岁,未成年!
请输入姓名:Tom
请输入年龄:22
Tom年龄22岁,青年!
请输入姓名:Leo
请输入年龄:31
Leo年龄31岁,青壮年!
请输入姓名:Rose
请输入年龄:51
Rose年龄51,中老年!
请输入姓名:Marry
请输入年龄:60
Marry年龄60,老年!
请输入姓名:Mali
请输入年龄:85
Mali年龄85,吉祥老人!
请输入姓名:Amy
请输入年龄:99
Amy年龄99,吉祥老人!
========================运行结果====================================

二、switch分支语句

在Scala中没有switch语句,而是使用模式匹配(match-case)来处理的。

三、for循环

示例代码:

package com.lj.scala.main

/**
  * @author Administrator
  * @create 2020-03-07 21:06
  */
object ForTest {

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

        /**
          * 范围数据循环方式
          * 1、start to end:前后为闭区间
          * 2、start until end:前闭后开
          */
        var sum = 0
        for (i <- 1 to 3) {
            sum += i
        }
        println(s"to方式sum求和:$sum")
        sum = 0
        for (i <- 1 until 3) {
            sum += i
        }
        printf("until方式sum求和:%s\n", sum)
        sum = 0

        /**
          * 循环守卫:即循环保护式(也称条件判断是),保护式为true则进入循环体内部,为false则跳过,相当于continue
          *
          */

        for (i <- 0 to 100 if i%2 == 0) {
            sum += i
        }
        printf("循环守卫方式sum求和:%s\n", sum)
        sum = 0
        // 上面的循环守卫方式,相当于下面的if判断式
        for (i <- 0 to 100) {
            if (i % 2 == 0) {
                sum += i
            }
        }
        printf("循环守卫循环体内判断方式sum求和:%s\n", sum)
        sum = 0

        /**
          * 引入变量
          */

        for (i <- 1 to 3; j = 4 - i) {
            print("j=" + j + " ")
        }
        println("\n第二种方式如下")
        // 上面的一如变量相当于下面的代码
        for (i <- 1 to 3) {
            var j = 4 - i
            print("j=" + j + " ")
        }
        println()

        /**
          * 嵌套循环
          */

        for (i <- 1 to 2; j <- 2 to 3) {
            printf("i = %s, j = %s\n", i, j)
        }
        println()

        /**
          * 循环返回值
          * 代码中关键字yield说明:将遍历过程中处理的结果返回到一个Vector集合
          * yield i将每次循环得到的i放入到vector集合中,并返回给res
          * i这里是一个代码块如下代码很好的说明了这个特点,所以我们可以对i进行处理
          */

        val res = for (i <- 0 to 10 if i%2 == 0) yield i
        println("循环返回值res:" + res)
        val res2 = for (i <- 0 to 10) yield {
            if (i%2 == 0) {
                i
            } else {
                i + "不是偶数"
            }
        }
        println("循环返回值res2:" + res2)

        /**
          * 使用花括号{}代替小括号()
          */
        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 + "}")
        }

        /**
          * for循环控制步长使用Range(start, end, step)
          */

        for (i <- Range(153, 190, 20)) {
            println("步长数据:" + i)
        }
        
    }
    
}
========================运行结果====================================
to方式sum求和:6
until方式sum求和:3
循环守卫方式sum求和:2550
循环守卫循环体内判断方式sum求和:2550
j=3 j=2 j=1 
第二种方式如下
j=3 j=2 j=1 
i = 1, j = 2
i = 1, j = 3
i = 2, j = 2
i = 2, j = 3

循环返回值res:Vector(0, 2, 4, 6, 8, 10)
循环返回值res2:Vector(0, 1不是偶数, 2, 3不是偶数, 4, 5不是偶数, 6, 7不是偶数, 8, 9不是偶数, 10)
i = 1时,j = 2
i = 2时,j = 4
i = 3时,j = 6
{i} = {1}时,{j} = {2}
{i} = {2}时,{j} = {4}
{i} = {3}时,{j} = {6}
步长数据:153
步长数据:173
========================运行结果====================================

四、while循环控制

示例代码:

package com.lj.scala.main

/**
  * @author Administrator
  * @create 2020-03-07 21:56
  */
object WhileTest {

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

        /**
          * while循环语法格式
          * while () {
          *     循环体语句
          *     循环变量迭代
          * }
          */
        
        var flag = true
        var i = 2
        while (flag) {
            println("运算结果:" + (i * 3))
            i += 1
            if (i == 5) {
                flag = false
            }
        }

    }

}
========================运行结果====================================
运算结果:6
运算结果:9
运算结果:12
========================运行结果====================================

五、do…while循环语句

示例代码:

package com.lj.scala.main

/**
  * @author Administrator
  * @create 2020-03-07 22:03
  */
object DoWhileTest {

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

        /**
          * do...while循环语法格式
          *
          * 循环变量初始化
          * do {
          *     循环体语句
          *     循环变量迭代
          * } while(循环条件)
          *
          */

        var i = 0
        do{
            println("运算结果:" + (i * 17))
            i += 26
        } while ( i < 98)

    }

}
========================运行结果====================================
运算结果:0
运算结果:442
运算结果:884
运算结果:1326
========================运行结果====================================

六、while循环的终断

基本说明

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

示例代码:

package com.lj.scala.main

import util.control.Breaks._

/**
  * @author Administrator
  * @create 2020-03-07 22:13
  */
object WhleBreakTest {

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

        /**
          * breakable()函数
          * 说明:breakable是一个高阶函数:可以接收函数的函数就是高阶函数
          */

        /*def breakable(op: => Unit){
            try {
                op
            } catch {
                case ex: BreakControl =>
                    if (ex ne breakException) throw ex
            }
        }
        op: => Unit表示接收的参数是一个没有输入,没有返回值的函数
        即可以简单理解可以接收一段代码块
        */

        // breakable对break()抛出异常做了处理,代码就继续执行
        var n = 1
        breakable{
            while ( n <= 20) {
                n += 5
                println("n = " + n)
                if (n > 18) {
                    // 终断while
                    break()
                }
            }
        }
        println("结束!!!")

    }

}
========================运行结果====================================
n = 6
n = 11
n = 16
n = 21
结束!!!
========================运行结果====================================

如何实现continue的效果

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

学习来自:北京尚学堂韩顺平老师—尚硅谷大数据技术之Scala
每天进步一点点,也许某一天你也会变得那么渺小!!!

发布了20 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/XuanAlex/article/details/104718871
今日推荐