一、条件表达式
(一)语法格式

if (条件) 值1 else 值2

(二)执行情况

条件为真,结果是值1;条件为假,结果是值2。如果if和else的返回结果同为某种类型,那么条件表达式结果也是那种类型,否则就是Any类型

(三)案例演示
任务1、根据输入值的不同进行判断
 

python双重for循环break_后端

当然也可以在一个表达式中进行多次判断

python双重for循环break_scala_02

 可以将上述条件表达式改造成嵌套的选择结构,可读性倒是提高了,但是简洁性降低了

python双重for循环break_后端_03

任务2、编写Scala程序,判断奇偶性

  • 打开Scala项目ScalaDemo2022,创建net.hw.structure包,在包里创建Example01对象

python双重for循环break_python双重for循环break_04

package net.hw.structure

import scala.io.StdIn

object Example01 {
  def main(args: Array[String]): Unit = {
    print("n = ")
    val n = StdIn.readLine().toInt
    if (n % 2 == 0) {
      println(n.toString + "是偶数")
    } else {
      println(n.toString + "是奇数")
    }
  }
}

 运行程序,查看结果

python双重for循环break_开发语言_05

利用if结构具有返回值的特性,改写程序

python双重for循环break_Java_06

运行程序,查看结果

python双重for循环break_scala_07

二、块表达式
(一)语法格式

块表达式为包含在符号“{}”中的语句块

(二)执行情况

需要注意的是,Scala中的返回值是最后一条语句的执行结果,而不需要像Java一样单独写return关键字。如果表达式中没有执行结果,就返回一个Unit对象,类似Java中的void。

(三)案例演示

语句块最后一句的值就是整个块表达式的结果

python双重for循环break_后端_08

语句块最后一句没有执行结果,那么块表达式结果就是Unit

python双重for循环break_开发语言_09

三、for循环

(一)案例演示

  • 两种方式实现

python双重for循环break_scala_10

  • Range(a, b): 从a到b,不包含b,跟Python里的range函数一样,含头不含尾
  • 1 to 10表示将1到10的所有值组成一个集合,且包括10。若不想包括10,则可使用关键字until

python双重for循环break_python双重for循环break_11

打印字符直角三角形

python双重for循环break_后端_12

利用map函数产生每行星号构成的向量,然后利用foreach函数循环输出

python双重for循环break_开发语言_13

利用双重循环与流间变量

python双重for循环break_scala_14

任务2、遍历字符串,输出每个字符

  • 方法一、按索引取字符串的每个字符

python双重for循环break_后端_15

方法二:将字符串看作一个由多个字符组成的集合

python双重for循环break_scala_16

任务3、计算 1 + 2 + 3 + … + 100

  • 注意sum必须定义为var型变量

python双重for循环break_后端_17

任务4、输出列表内的偶数

  • 采用两种方式来实现

python双重for循环break_scala_18

任务5、输出全部两位素数

for (n <- 10 to 100; if !(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0))
    print(n.toString + " ")

 

2、案例演示

任务1、打印九九表

方法一、采用双重循环来实现

python双重for循环break_开发语言_19

python双重for循环break_scala_20

python双重for循环break_Java_21

python双重for循环break_后端_22

在项目ScalaDemo2022里创建Example03对象

package net.hw.structure

object Example03 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9; j <- 1 to i) {
      print(i.toString + "×" + j + "=" + (i * j) + "\t")
      if (i == j) println()
    }
  }
}

python双重for循环break_开发语言_23

方法二、采用单重循环来实现

  • 在项目ScalaDemo2022里创建Example04对象

python双重for循环break_后端_24

package net.hw.structure

object Example04 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9; j <- 1 to i; sep = if (i == j) "\r\n" else "\t")
      print(i.toString + "×" + j + "=" + (i * j) + sep)
  }
}

 方法三、采用单重循环、流间变量与yield来实现

python双重for循环break_scala_25

package net.hw.structure

object Example05 {
  def main(args: Array[String]): Unit = {
    val list = for (i <- 1 to 9; j <- 1 to i; sep = if (i == j) "\r\n" else "\t")
      yield i.toString + "×" + j + "=" + (i * j) + sep
    for (x <- list) print(x)
  }
}

python双重for循环break_Java_26

四、异常处理

(一)异常处理概述

Scala中继承了Java的异常机制,提供了程序中产生意外情况时处理的机制,抛出异常的过程和Java中基本一致,通过throw关键字进行:throw XxxException(),一旦抛出可以当场捕获处理或接着向上抛,捕获异常是通过 try-catch-finally来实现的。

(二)案例演示

python双重for循环break_python双重for循环break_27

package net.hw.structure

import java.io.IOException


object Example07 {
  def main(args: Array[String]): Unit = {
    var message = ""
    val result = try {
      mx()
      "恭喜,程序执行正常!"
    } catch {
      case e: NullPointerException => "空指针异常"
      case e: IOException => "呵呵,I/O异常~"
      case e: Exception => "管它呢,反正是异常~"
    } finally {
      message = "程序到此为止!"
      "无论是否有异常,都会执行finally里的语句~"
    }
    println(result)
    println(message)
  }

  def mx(): Unit = {
    throw new RuntimeException("随便抛出一个异常~")
  }
}

 执行程序,查看结果(此时有异常,result取的是catch里的返回值 - 管它呢,反正是异常~,finally语句块执行了的,因此message可以打印出来 - 程序到此为止!

注释掉mx()方法里的语句

python双重for循环break_python双重for循环break_28

执行程序,查看结果(此时有异常,result取的是try里的返回值 - 恭喜,程序执行正常!

python双重for循环break_开发语言_29

 

六、match结构

(一)语法格式

  • Scala中的match类似于其他语言的switch。与Java不同的是,match语句可以应用在任何类型量或表达式上,另外需要调用break语句,match默认执行完一个case后直接跳出match结构。注意,match是具有返回值的,就是被选到的case的值。

(二)案例演示

python双重for循环break_开发语言_30

 运行程序,查看结果 

package net.hw.structure

import scala.io.StdIn

object Example08 {
  def main(args: Array[String]): Unit = {
    print("输入城市:")
    val city = StdIn.readLine();
    val comment = city match {
      case "北京" => "伟大的首都"
      case "上海" => "神奇的魔都"
      case "泸州" => "醉人的酒城"
      case _ => "一般的城市"
    }
    print(city + ": " + comment)
  }
}

七、变量作用域

(一)Java变量作用域

  • Java中根据不同大括号区分变量作用范围,不允许有叠加,外部看不到内部,内部能看到外部。

1、内部能访问外部

python双重for循环break_scala_31

net.hw.structure包创建Example09对象

python双重for循环break_python双重for循环break_32

 

2、外部不能访问内部

  • net.hw.structure包创建Example10对象

python双重for循环break_后端_33

 

八、补充案例

任务:评定成绩等级

1、编写符合函数式编程风格的Sala程序

  • net.hw.structure包里创建Example11对象

 

python双重for循环break_python双重for循环break_34

package net.hw.structure

import scala.io.StdIn

object Example11 {
  def main(args: Array[String]): Unit = {
    print("score = ")
    val score = StdIn.readLine().toInt

    val comment = if (score > 100) {
      "超出范围"
    } else if (score >= 90) {
      "优秀"
    } else if (score >= 80) {
      "良好"
    } else if (score >= 70) {
      "中等"
    } else if (score >= 60) {
      "及格"
    } else if (score >= 0) {
      "不及格"
    } else {
      "超出范围"
    }

    println("评语:" + comment)
  }
}

 

python双重for循环break_python双重for循环break_35

2、非函数式风格的程序

  • 看看下面这个程序 - Example13

 

python双重for循环break_scala_36

原文链接: