Scala 学习入门到掌握-循环的特殊用法[6]

    技术2022-07-11  78

    实例一:breakable的使用

    object WhileBreak { def main(args: Array[String]): Unit = { var n = 1 //breakable()函数 //说明 //1. breakable 是一个高阶函数:可以接收函数的函数就是高阶函数(后面详解) //2. def breakable(op: => Unit) { // try { // op // } catch { // case ex: BreakControl => // if (ex ne breakException) throw ex // } // } // (1) op: => Unit 表示接收的参数是一个没有输入,也没有返回值的函数 // (2) 即可以简单理解可以接收一段代码块 // 3. breakable 对break()抛出的异常做了处理,代码就继续执行 // 4. 当我们传入的是代码块,scala程序员会将() 改成{} breakable { while (n <= 20) { n += 1 println("n=" + n) if (n == 18) { //中断while //说明 //1. 在scala中使用函数式的break函数中断循环 //2. def break(): Nothing = { throw breakException } break() } } } println("ok~~") //注意break函数,可以使用在for或者do..while breakable { for (i <- 1 to 100) { println("i=" + i) if (i == 20) { break() } } } println("ok2~~~~") } }

    示例二:Continue(if守卫)

    object ContinueDemo { def main(args: Array[String]): Unit = { //说明 //1. 1 to 10 //2. 循环守卫 if (i != 2 && i != 3) 这个条件为ture,才执行循环体 // 即当i ==2 或者 i == 3时,就跳过 for (i <- 1 to 10 if (i != 2 && i != 3)) { println("i=" + i) } //也可以写成如下的形式 println("============================") for (i <- 1 to 10) { if (i != 2 && i != 3){ println("i=" + i) } } } }

    示例三:do-while

    object Demo01 { def main(args: Array[String]): Unit = { var i = 0 // for do { printf(i + "hello,尚硅谷\n" ) i += 1 } while (i < 10) } }

    示例四:遍历

    object ForDemo01 { def main(args: Array[String]): Unit = { //输出10句 "hello,尚硅谷!" val start = 1 val end = 10 //说明 //1. start 从哪个数开始循环 //2. to 是关键字 //3. end 循环结束的值 //4. start to end 表示前后闭合 for (i <- start to end) { println("你好,尚硅谷" + i) } //说明for 这种推导时,也可以直接对集合进行遍历 var list = List("hello", 10, 30, "tom") for (item <- list) { println("item=" + item) } } }

    练习一:循环

    object ForExercise01 { def main(args: Array[String]): Unit = { /* for循环练习题(学员先做) 打印1~100之间所有是9的倍数的整数的个数及总和. 完成下面的表达式输出 */ val start = 1 val end = 100 var count = 0 var sum = 0 for (i <- start to end) { if (i % 9 == 0) { count += 1 sum += i } } printf("count=%d, sum=%d\n", count, sum) //输出加法的循环表达式 val num = 6 for (i <- 0 to num) { printf("%d + %d = %d\n", i, (num - i), num) } var list = List(1,2) } }

    练习二:if守卫

    object ForGuard { def main(args: Array[String]): Unit = { for(i <- 1 to 3 if i != 2) { print(i + " ") //1 3 } println() } }

    练习三:until 关键字

    object ForUntilDemo02 { def main(args: Array[String]): Unit = { //输出10句 "hello,尚硅谷!" val start = 1 val end = 11 //循环的范围是 start --- (end-1) for (i <- start until end) { println("hello, 尚硅谷" + i) } } }

    练习四:for循环特殊用法

    object ForVar { def main(args: Array[String]): Unit = { for(i <- 1 to 3; j = 4 - i) { print(j + " ") // 3,2,1 } } }

    练习五:多重for循环

    object MultiFor { def main(args: Array[String]): Unit = { for(i <- 1 to 3; j <- 1 to 3) { println(" i =" + i + " j = " + j) //输出即句 9 } //上面的写法,可以写成 println("--------------------------") for(i <- 1 to 3) { for (j <- 1 to 3) { println(" i =" + i + " j = " + j) //输出即句 9 } } } }

    练习六:步长

    object stepfor { def main(args: Array[String]): Unit = { for (i <- 1 to 10) { println("i=" + i) } //步长控制为2 println("-------------") //Range(1,10,2)的对应的构建方法是 //def apply(start: Int, end: Int, step: Int): Range = new Range(start, end, step) for (i <- Range(1, 10, 2)) { println("i=" + i) } //控制步长的第二种方式-for循环守卫 println("**************************") for (i <- 1 to 10 if i % 2 == 1) { println("i=" + i) } } }

    练习七:for特殊用法

    object usefor2 { def main(args: Array[String]): Unit = { for (i <- 1 to 3; j = i * 2) { println(" i= " + i + " j= " + j) } //等价 println("------------------------") for { i <- 1 to 3 j = i * 2} { println(" i= " + i + " j= " + j) } } }

    练习八:yield关键字

    object yieldFor { def main(args: Array[String]): Unit = { //说明 val res = for(i <- 1 to 10) yield i 含义 //1. 对1 to 10 进行遍历 //2. yield i 将每次循环得到i 放入到集合Vector中,并返回给res //3. i 这里是一个代码块,这就意味我们可以对i进行处理 //4. 下面的这个方式,就体现出scala一个重要的语法特点,就是将一个集合中个各个数据 // 进行处理,并返回给新的集合 val res = for(i <- 1 to 10) yield { if (i % 2 == 0) { i }else { "不是偶数" } } println(res) } }
    Processed: 0.008, SQL: 9