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

原文地址:https://www.cnblogs.com/lyr999736/p/11145807.html

时间: 2024-10-13 07:14:26

Scala的内建控制结构的相关文章

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

Scala的内建控制结构包括:if.while.for.try.match和函数调用 1.if表达式 //常见的写法 var filename = "name" if (!args.isEmpty) filename = args(0) //比较简洁的写法 var filename1 = if (!args.isEmpty) args(0) else "name" //更简洁的写法,不要有中间变量 println(if(!args.isEmpty) args(0)

内建控制结构

Scala里没有多少内建控制结构.仅有的包括if,while,for,try,match和函数调用.如此之少的理由是,从一开始Scala就包括了函数文本.代之以在基本语法之上一个接一个添加高层级控制结构,Scala把它们汇集在库里. 有件你会注意到的事情是,几乎所有的Scala的控制结构都会产生某个值.这是函数式语言所采用的方式,程序被看成是计算值的活动,因此程序的控件也应当这么做.你也可以把这种方式看做早已存在于指令式语言中的一种趋势(函数调用返回值,被调用函数更新被当作参数传入的输出变量也归

Scala 编程(四)内建控制结构

if 表达式 Scala 的 if 如同许多其它语言中的一样工作.它测试一个状态并据其是否为真,执行两个分支中的一个: var filename = "default.txt" if (!args.isEmpty) filename = args(0) 由于 Scala 的 if 是能返回值的表达式,可以改成用 val 的更函数式的风格: val filename = if (!args.isEmpty) args(0) else "default.txt" 使用

python高级编程之(类级):子类内建类型

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #类级 #在2.2中,提出了类型(type0与类(class)统一(请访问:https://www.python.org/download/releases/2.2.3/descintro(可能已经不存在了))-这使内建类型的子类化成为可能,并且添加一个新内建类型object #用于所有内建类的公共祖先 #展示一个名为distinctdict类的代码,与平常的dic

Python内建方法

参考: https://docs.python.org/3.4/library/functions.html https://docs.python.org/2/library/functions.html http://blog.csdn.net/jgood/article/details/4371991 以上链接分别为Python官网的3.4版本的内建方法说明.2.X(指2.6和2.7)版本的内建方法说明.以及JGood对2.X版本的内建方法说明的翻译. abs(x) 返回一个数的绝对值.参

JavaScript内建对象

JavaScript内建对象包括: String.Array.Math.Date.Boolean.Number.Event.RegExp. 使用内建对象的属性和方法需要使用new关键字和构造函数创建内建对象的实例,对象实例继承对象的属性和方法. String 定义了所有处理字符串的操作. Array 提供一个数组模型,存储大量有序数据. Math 定义了所有数学运算. Date 定义了所有处理日期和时间的操作. Boolean 定义了处理布尔值的操作. Number 定义了处理数字的操作. Ev

任务内建消息队列——OSTaskQ???()

一.知识背景 实际应用中,多个任务同时等待一个消息队列的情况很少见,也就是说OSQ???()用的并不多,因此,在uC/OS-III 中,每一个任务都有其内建的消息队列.用户可以通过外部消息队列直接发送消息给任务. 这个特性不仅简化了代码, 还提高了效率.如下示意图, uC/OS-III 中与任务消息队列相关的服务都是以 OSTask???()开头的.设置 OS_CFG.H 中的 OS_CFG_TASK_EN 使能任务的消息队列服务.与任务消息队列相关的代码在 OS_TASK.C 中. 当用户清楚

django 内建标签和过滤器参考

下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block 定义一个能被子模板覆盖的 块. 参阅 模板继承 了解更多信息 comment 注释.模板引擎会忽略掉 {% comment %} 和 {% endcomment %} 之间的所有内容. cycle 在循环时轮流使用给定的字符串列表中的值. 在一个循环中, 在循环过程中的每次循环里轮流使用给定的字符串

定制Asp.NET 5 MVC内建身份验证机制 - 基于自建SQL Server用户/角色数据表的表单身份验证

背景 在需要进行表单认证的Asp.NET 5 MVC项目被创建后,往往需要根据项目的实际需求做一系列的工作对MVC 5内建的身份验证机制(Asp.NET Identity)进行扩展和定制: Asp.NET内建的身份验证机制会使用Local DB(本地数据库)读写用户相关的信息,而在数据库驱动的项目中,管理业务信息的数据库通常是特定的数据库环境,比如远程SQL Server数据库实例或Access数据库等等,业务数据库中保存着一系列针对业务需求的数据表,因此需要定制MVC 5内建身份验证,使其操作