Scala中的流程控制

条件表达式

语法结构:

if(条件表达式){
结果
}else if(条件表达式){
结果
}else{
结果
}

示例:

  def main(args: Array[String]) {
    var x = 100
    val y = if (x > 0) 1 else -1 //判断x的值,将结果赋给y
    println(y) //1

    x = -100
    val z = if (x > 1) 1 else "error" //支持混合类型表达式
    println(z) //errot

    x = 0
    //如果缺失else,相当于if (x > 2) 1 else ()
    val m = if (x > 2) 1
    println(m)  // ()

    //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
    val n = if (x > 2) 1 else ()
    println(n) // ()

	x = 5
    //if和else if
    val k = if (x < 0) 0 else if (x >= 1) 1 else -1
    println(k) //1
  }

case

示例1:值匹配

def main(args: Array[String]): Unit = {
  val i = StdIn.readInt();
  i match {
    case 1 => println("11111")
    case 2 => println("222222")
    case _ => println("......")
  }
}

示例2:类型匹配

def main(args: Array[String]): Unit = {
  val arr = Array("hello", 11, 22.0, -22.0)
  val i = Random.nextInt(4)
  println(i)
  val v = arr(i)
  println(v)
  v match {
    case x: Int => println("Int " + x)
    case y: Double if (y >= 0) => println("Double " + y)
    case z: String => println("String " + z)
    case _ => throw new Exception("not match exception")
  }
}

for循环

for循环语法结构:

for (i <- 表达式/数组/集合)

示例:

def main(args: Array[String]) {
  //表达式1 to 10返回一个Range(区间),每次循环将区间中的一个值赋给i
  for (i <- 1 to 10)
    print(i + "  ")
  println()

  println(1 to 3)
  println(1 until(3)) //until产生的是一个左闭右开的区间

  //循环遍历until生成的区间
  for (i <- 0 until(6))
    print(i+"  ")
  println()

  //高级for循环
  for (i <- 1 to 3; j = 4 - i) {
    print(j + "\t")
  }

  //每个生成器都可以带一个条件,注意:if前面没有分号
  for (i <- 1 to 3; j <- 1 to 3 if i != j) //注意:if前面没有分号
    print(i + ":" + j + "    ")
  println()
}

示例:嵌套循环

def main(args: Array[String]): Unit = {
  for (i <- 1 to 3; j <- 1 to 3) {
    println("i =" + i + " j =" + j)
  }
  //上面代码等价于
  for (i <- 1 to 3) {
    for (j <- 1 to 3) {
      println("i =" + i + " j =" + j)
    }
  }
}

示例:for循环中可以使用花括号{}代替小括号()

def main(args: Array[String]): Unit = {
  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)
  }
}

示例:控制步长

@Test
def fun3(): Unit = {
  val r = Range(1, 10, 3)
  println(r.toBuffer)

  for (i <- Range(1, 10, 3)) { //左闭右开
    print(i + "\t")
  }
  println()
  //灵活的使用守卫 [推荐]
  for (i <- 1 to 10 if i % 3 == 1) { //左闭右闭
    print(i + "\t")
  }
}

while循环

示例:

def main(args: Array[String]): Unit = {
  var n = 1
  while (n <= 10) {
    print(n + "\t")
    n += 1 //循环遍历的迭代
  }
  println("\r\n"+n)
}

do…while循环

示例:

def main(args: Array[String]): Unit = {
  var sum = 0
  var i = 1
  do {
    sum = sum + i
    i = i + 1
  } while (i <= 100)
  println(sum) //5050
}

循环中断

Scala推荐使用函数式的风格解决break 和 contine 的功能,而不是关键字break/continue。

示例:

import util.control.Breaks._
@Test
def fun1(): Unit = {
  breakable {
    for (i <- 1 to 10) {
      if (i == 5) {
        break()
      }
      print(i + "\t")
    }
  }
  println("\r\n程序继续....")
}

示例:使用循环守卫机制

@Test
def fun3(): Unit = {
  var sum = 0
  var flag = true
  for (i <- 1 to 100 if flag == true) {
    sum += i
    if (sum > 20) {
      println("当前的 i=" + i)
      flag = false
    }
  }
  println("\r\n程序继续....")
}
发布了460 篇原创文章 · 获赞 812 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/lianghecai52171314/article/details/105493342