Scala的内建控制结构

Posted lyr999736

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala的内建控制结构相关的知识,希望对你有一定的参考价值。

一: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()函数
      */
  

以上是关于Scala的内建控制结构的主要内容,如果未能解决你的问题,请参考以下文章

Scala学习笔记——内建控制结构

内建控制结构

Scala 编程内建控制结构

Spark基础学习笔记12:Scala内建控制结构

大数据处理学习笔记1.5 掌握Scala内建控制结构

每天半小时掌握Scala(day 02)