大数据——Scala For循环控制

Scala 中 while 和 do...while 循环同 Java 一致,这里不过多介绍,本文着重介绍For循环控制。

目录

一、范围数据循环(To)

1.1 基本语法

1.2 案例

二、范围数据循环(Until)

2.1 基本语法

2.2 案例

三、循环守卫

3.1 基本语法

3.2 案例

四、循环步长

4.1 基本语法

4.2 案例

五、嵌套循环

5.1 基本语法

5.2 案例

六、引入变量

6.1 基本语法

七、循环返回值

7.1 基本语法

7.2 案例

八、倒序打印

8.1 基本语法

九、循环中断

9.1 基本说明

9.2 案例


一、范围数据循环(To)

1.1 基本语法

for(i <- 1 to 3){
    print(i + " ")
}
println()
1 i 表示循环的变量, <- 规定 to
2 i 将会从 1-3 循环, 前后闭合

1.2 案例

        输出5遍“I love you”

object TestFor {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 5){
      println("I love you")
    }
  }
}

二、范围数据循环(Until)

2.1 基本语法

for(i <- 1 until 3){
    print(i + " ")
}
println()
1 )这种方式和前面的区别在于 i 是从 1 3-1
2 )即取值为 前闭合后开 的范围

2.2 案例

输出5遍“I love you”

object TestFor {
  def main(args: Array[String]): Unit = {
    for(i <- 1 until 5+1){
      println("I love you")
    }
  }
}

三、循环守卫

3.1 基本语法

for(i <- 1 to 3 if i != 2){
    print(i + " ")
}
println()

说明:

        (1 )循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环
体内部,为 false 则跳过,类似于 continue
        (2 )上面的代码等价
for(i <- 1 to 3){
    if(i !=2){
        print(i + " ")
    }
}
println()

3.2 案例

        输出1到10中不是3的倍数的值

object TestFor {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 10 if i%3 != 0){
      println(i)
    }
  }
}

四、循环步长

4.1 基本语法

for(i <- 1 to 10 by 2){
    println(s"i=${i}")
}

说明:by表示步长

4.2 案例

        输出1到10以内的所有奇数

object TestFor {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 10 by 2){
      println(s"i=${i}")
    }
  }
}

五、嵌套循环

5.1 基本语法

for(i <- 1 to 3; j <- 1 to 3){
    println(s"i=${i} j=${j}")
}
说明:没有关键字,所以范围后一定要加 来隔断逻辑
上面代码等价于
for(i <- 1 to 3){
    for(j <- 1 to 3){
        println(s"i=${i} j=${j}")
    }
}

5.2 案例

        控制台输出九九乘法表

object TestFor {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 9; j <- 1 to i){
      print(s"${i}*${j}=${i*j}\t")
      if(i == j) println()
    }
  }
}

六、引入变量

6.1 基本语法

for(i <- 1 to 3; j = 4 - i){
    println(s"i=${i} j=${j}")
}
说明:
1 for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑
2 for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号,当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号,如下
for {
 i <- 1 to 3
j = 4 - i
} {
 println("i=" + i + " j=" + j)
}

        上面代码等价于

for (i <- 1 to 3) {
 var j = 4 - i
 println("i=" + i + " j=" + j)
}

七、循环返回值

7.1 基本语法

val res = for(i <- 1 to 10) yield i
println(res)
说明:将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。
注意:开发中很少使用。

7.2 案例

        将原数据中所有值乘以 2,并把数据返回到一个新的集合中。

object TestFor {
  def main(args: Array[String]): Unit = {
    val res = for(i <- 1 to 10) yield {
      i * 2
    }
    println(res)
    //res类型为vector集合容器
    println(res.getClass.getName)
  }
}

八、倒序打印

8.1 基本语法

for(i <- 1 to 10 reverse){
    println(i)
}

九、循环中断

9.1 基本说明

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

9.2 案例

        需求1:采用异常的方式退出循环

object TestFor {
  def main(args: Array[String]): Unit = {
    try {
      for (elem <- 1 to 10) {
        println(elem)
        if (elem == 5) throw new RuntimeException
      }
    }catch {
      case e =>
    }
    println("正常结束循环")
  }
}

        需求 2:采用 Scala 自带的函数,退出循环

import scala.util.control.Breaks
object TestBreak {
  def main(args: Array[String]): Unit = {
    Breaks.breakable(
      for (elem <- 1 to 10) {
        println(elem)
        if (elem == 5) Breaks.break()
      }
    )
    println("正常结束循环")
  }
}
        需求 3 :对 break 进行省略         
import scala.util.control.Breaks._
object TestBreak {
  def main(args: Array[String]): Unit = {
    breakable {
      for (elem <- 1 to 10) {
        println(elem)
        if (elem == 5) break
      }
    }

    println("正常结束循环")
  }
}
        需求 4 :循环遍历 10 以内的所有数据,奇数打印,偶数跳过( continue
object TestBreak {
  def main(args: Array[String]): Unit = {
    for (elem <- 1 to 10) {
      if (elem % 2 == 1) {
        println(elem)
      } else {
        println("continue")
      }
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicky_Tang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值