Scala的内建控制结构

时间:2022-09-08 17:51:45

一:if表达式

  Scala的if表达式和Java语言的用法一样,if,if else,if elseif else这三种结构。

object If_expression {
  def main(args: Array[String]): Unit = {
    /**
      * Scala的if表达式和Java的一样用法
      */

    val a = readInt()
    if(a > 0){
      println(a+" > 0")
    }else if(a < 0){
      println(a+" < 0")
    }else{
      println(a+" = 0")
    }
  }
}

 二:while 循环

  Scala的while,do while的用法和Java的用法一样,举例说明下。

object While_loop {
  def main(args: Array[String]): Unit = {
    /**
      * while循环,do while循环和Java的用法一样
      */

    var i = 10
    var sum = 0
    while(i > 0){
      sum += i
      i -= 1
    }
    println(sum)

    i = 10
    sum = 0
    do{
      sum += i
      i -= 1
    }while(i>0)
    println(sum)
  }
}

 三:for表达式

  Scala的for循环和Java的用法不一样,可以大概分为以下几种。

  (1)直接遍历数组,有三种

  (2)遍历数组,表达式中带有过滤条件

object For_expression {
  def main(args: Array[String]): Unit = {
    /**
      * Scala的for循环和Java的用法不一样
      */

    val list = Array(1,2,3,4,5)

    /**
      * 第一种,使用a to b,范围[a,b],使用下标
      */
    for(i <- 0 to list.length-1){
      print(list.apply(i)+" ")
    }
    println()

    /**
      * 第二种,使用a until b,范围[a,b),使用下标
      */

    for(i <- 0 until list.length){
      print(list(i)+" ")
    }
    println()

    /**
      * 第三种,直接遍历,不需要下标,i指向list的每个元素
      */
    for(i <- list){
      print(i+" ")
    }
    println()

    /**
      * for循环中使用多个过滤器
      */

    for(i <- list if i%2==0 if i>3){
      print(i+" ")
    }
    println()

    for(i <- list if check(i) ){
      print(i+" ")
    }
    println()

    /**
      * 构造新集合,使用yield语法
      */
    val t = for(i <- list if i>2) yield{
      val k = i * 2 + 10
      k
    }

    println(t.toList)

  }

  def check(a:Int): Boolean = if(a>2) true else false
}

 四:异常处理

  Scala的异常处理和Java的用法一样,使用try catch语句。

object Try_catch {
  def main(args: Array[String]): Unit = {
    /**
      * Scala的处理异常和Java用法一样
      */

    try {
      val f = new FileReader("try.txt")
    }catch {
      case ex: FileNotFoundException => println("文件不存在")
      case ex: IOException => println("IO异常")
    }finally {
      println("异常处理完成")
    }
  }
}

 五:match匹配

  Scala的match匹配功能和Java的switch case一样,也有返回值。

object Match_expression {
  def main(args: Array[String]): Unit = {
    /**
      * Scala的match语法类似于Java的switch语法
      */

    /**
      * 正常匹配,然后打印结果
      */
    val name = "alex"
    name match {
      case "Lei" => println("Name is Lei")
      case "alex" => println("Name is alex")
      case "Lily" => println("Name is Lily")
      case _ => println("Other")
    }

    /**
      * 匹配选择,有返回值,而且匹配成功之后不会继续往下匹配
      */
    val fri = "Lily"
    val t = fri match {
      case "Alex" => "A"
      case "Lily" => "L1"
      case "Bob" => "B"
      case "Lily" => "L2"
    }
    println(t)
  }
}

 六:Scala中的break和continue用法

  Scala中没有break和continue关键字,使用其它的方式实现break和continue的功能,需要导入包,import scala.util.control.Breaks._包。

import scala.util.control.Breaks._
/**
  * @Author:Alex_lei
  * @Description:
  */
object BC {
  def main(args: Array[String]): Unit = {
    /**
      * 这里说的是Java的break和continue,Scala中并没有这个用法
      * 使用变量标记实现
      */


    /**
      * 求前五个元素和,实现break用法
       */

    val arr = Array(1,2,3,4,5,6)
    var sum = 0
    breakable({
      for(i <- arr){
        if(i>5)
          break()
        sum += i
      }
    })
    println(sum)

    /**
      * 求前三个元素的和,实现continue
      */

    sum = 0
    for(i <- arr){
      breakable({
        if(i>3)
          break()
        sum += i
      })
    }
    println(sum)

    /**
      * 二者区别在于执行的循环体在breakable外还是内,二者都是使用break()函数
      */
  }
}