scala基础篇·控制流

本文深入探讨Scala中的控制流概念,包括条件语句if-else、块语句、输入输出操作、循环结构(while和for)、高级for循环用法及break控制方式。通过具体示例展示Scala语言控制流的灵活性与强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scala基础篇·控制流

object TestControl {
  def main(args: Array[String]): Unit = {
    ifElse(1)
    ifElse(11)
    block()
    //inputAndOutput()
    cycle()
    advancedFor()
    break()
  }

  /**
    * if-else
    *
    * @param num
    */
  def ifElse(num: Int): Unit = {
    if (num > 10) println("i>10") else println("i<=10")
    val a = if (num > 10) 20 else 0
    printf("a=%d", a)
    println()
    val b = if (num > 20) 20
    val c = if (num > 20) 20 else ()
    println(b)
    println(c)
  }

  /**
    * 块语句
    */
  def block(): Unit = {
    val x1 = 0
    val y1 = 0
    val x2 = 2
    val y2 = 3

    val distance = {
      val dx = x2 - x1
      val dy = y2 - y1
      math.sqrt(math.pow(dx, 2) + math.pow(dy, 2))
    }

    println(distance)
  }

  /**
    * 输入输出
    */
  def inputAndOutput(): Unit = {
    val age = scala.io.StdIn.readLine("age:")
    printf("age is %s\n", age)
  }


  /**
    * 循环 while and for
    */
  def cycle(): Unit = {
    val start = 0
    val end = 10
    //while
    println("--while start--")
    var i = start
    while (i < end) {
      println(i)
      i += 1
    }
    println("--while end--")

    //for
    println("--for1 start--")

    for (j <- start.to(end)) {
      println(j)
    }
    println("--for1 end--")

    println("--for-to start--")
    for (j <- start to end) {
      println(j)
    }
    println("--for-to end--")

    println("--for-Array start--")
    for (j <- Array(1, 3, 5)) {
      println(j)
    }
    println("--for-Array end--")

    println("--for-string start--")

    val str = "hello"
    for (c <- str) {
      printf("contains char: %c\n", c)
    }

    //0 until str.length
    for (pos <- 0.until(str.length)) {
      printf("char at %d is : %s\n", pos, str(pos))
    }

    println("--for-string end--")
  }

  /**
    * 高级for循环
    */
  def advancedFor(): Unit = {
    println("多个生成器")
    for (i <- 1 to 3; j <- 1 to 3) printf("%d * %d = %d  ", i, j, i * j)
    println()
    println("生成器可以带守卫")
    for (i <- 1 to 3; j <- 1 to 3 if i <= j) printf("%d * %d = %d  ", i, j, i * j)
    println()
    println("每一个生成器都可以有一个守卫")
    for (i <- 1 to 3 if i > 1; j <- 1 to 3 if i <= j) printf("%d * %d = %d  ", i, j, i * j)
    println()
    println("可以定义变量")
    for (i <- 1 to 3; from = 4 - i; j <- from to 3) printf("%d * %d = %d  ", i, j, i * j)
    println()
    println("yield语句")
    println(for (i <- 1 to 10) yield i % 3)
    println()
    for (j <- for (i <- 1 to 10) yield i % 3) {
      printf("%d,", j)
    }

    println()
    println(for (i <- 0 to 3; c <- "hello") yield (c + i).toChar)
  }


  /**
    * break的方式
    */
  def break(): Unit = {

    println("boolean-flag start")
    var go = true
    for (i <- 1 to 100) {
      if (i > 5)
        go = false
      if (go)
        println(i)
    }

    println("boolean-flag end")

    //using break will end with exception
    println(" scala.util.control.Breaks.break()  start")
    for (i <- 1 to 10) {
      if (i > 3)
        scala.util.control.Breaks.break()
      println(i)
    }
    println(" scala.util.control.Breaks.break()  end: cannot print this because of exception")
  }
}

运行结果如下:

i<=10
a=0
()
()
i>10
a=20
()
()
3.605551275463989
--while start--
0
1
2
3
4
5
6
7
8
9
--while end--
--for1 start--
0
1
2
3
4
5
6
7
8
9
10
--for1 end--
--for-to start--
0
1
2
3
4
5
6
7
8
9
10
--for-to end--
--for-Array start--
1
3
5
--for-Array end--
--for-string start--
contains char: h
contains char: e
contains char: l
contains char: l
contains char: o
char at 0 is : h
char at 1 is : e
char at 2 is : l
char at 3 is : l
char at 4 is : o
--for-string end--
多个生成器
1 * 1 = 1  1 * 2 = 2  1 * 3 = 3  2 * 1 = 2  2 * 2 = 4  2 * 3 = 6  3 * 1 = 3  3 * 2 = 6  3 * 3 = 9  
生成器可以带守卫
1 * 1 = 1  1 * 2 = 2  1 * 3 = 3  2 * 2 = 4  2 * 3 = 6  3 * 3 = 9  
每一个生成器都可以有一个守卫
2 * 2 = 4  2 * 3 = 6  3 * 3 = 9  
可以定义变量
1 * 3 = 3  2 * 2 = 4  2 * 3 = 6  3 * 1 = 3  3 * 2 = 6  3 * 3 = 9  
yield语句
Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

1,2,0,1,2,0,1,2,0,1,
Vector(h, e, l, l, o, i, f, m, m, p, j, g, n, n, q, k, h, o, o, r)
boolean-flag start
1
2
3
4
5
boolean-flag end
 scala.util.control.Breaks.break()  start
1
2
3
Exception in thread "main" scala.util.control.BreakControl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值