与Java几乎相同

if…else

  • scala中,if…else..语句可以有返回值
  • {}中的最后一行为括号的返回值 ```scala // 返回值为 分支代码块最后一行表达式的返回值。 var age: Int = 16 val result: Unit = if (age <= 6) { println(“童年”) } else if(age < 18){ println(“青少年”) }

println(“result:” + result) / 输出结果: 青少年 result:() /

  1. ```scala
  2. var age: Int = 16
  3. val result: String = if (age <= 6) {
  4. println("童年")
  5. "童年" //如果定义返回值为String,每个分支都要写。如果每个分支想返回的类型不同,可以把if返回值定义为Any(公共父类)
  6. } else if(age < 18){
  7. println("青少年")
  8. "青少年"
  9. }
  10. println("result:" + result)
  11. /*
  12. 输出结果:
  13. 青少年
  14. result:青少年
  15. */
  • Scala中没有三元运算符

    1. Java: String res1 = (age>18) ? "成年" : "未成年"
    2. Scala: val res2: String = if (age > 18) "成年" else "未成年"
  • Scala中没有switch,但有match…case

    块表达式

    值是最后一个表达式的值

    1. val a = {
    2. println("1 + 1")
    3. 1 + 1
    4. }
    5. println(a) // 2

    for循环

    范围遍历

    1. // for(i <- 1.to(10)) 隐式转换
    2. // 包含边界
    3. for (i <- 1 to 10){ //
    4. println(i)
    5. }
    6. //不包含end,1-9
    7. for (i <- Range(1,10)){}
    8. for (i <- 1 until 10){}

    集合遍历

    1. for (i <- Array(12,23,44)) {}
    2. for (i <- List(12,34,54)) {}
    3. for (i <- Set(12,33,44)) {}

    循环守卫

    1. //java中
    2. for (int i = 1; i <= 10; i++) {
    3. if (i != 5){
    4. System.out.println(i);
    5. }
    6. }
    7. // Scala中没有continue关键字
    8. for (i <- 1 to 10 if i != 5) {
    9. println(i)
    10. }

    循环步长

    ```scala //for (i <- (1.to(10)).by(2)) for (i <- 1 to 10 by 2){}

//倒序遍历 for (i <- 30 to 13 by -2){} for (i <- 13 to 30 reverse){}

for (data <- 1.0 to 10.0 by 0.5){}

  1. <a name="Qwfj9"></a>
  2. ### 循环嵌套
  3. ```scala
  4. for (i <- 1 to 3){
  5. for(j <- 1 to 3){
  6. println(i + j)
  7. }
  8. }
  9. for (i <- 1 to 4; j <- 1 to 5){
  10. println(i + j)
  11. }
  1. //九九乘法表
  2. Object Test {
  3. def main(args: Array[String]): Unit = {
  4. for (i <- 1 to 9) {
  5. for (j <- 1 to i) {
  6. print(s"$j * $i = ${i * j} \t")
  7. }
  8. println()
  9. }
  10. // 简写
  11. for (i <- 1 to 9; j <- 1 to i) {
  12. print(s"$j * $i = ${i * j} \t")
  13. if (j == i) println()
  14. }
  15. }
  16. }

循环引入变量

  1. for (i <- 1 to 10){
  2. val j = 10 - i
  3. println("i = " + i + "j = " + j)
  4. }
  5. //引入变量
  6. for (i <- 1 to 10; j = 10 -i){
  7. println("i = " + i + "j = " + j)
  8. }
  9. // 分行写使用花括号
  10. for {
  11. i <- 1 to 10
  12. j = 10 - i
  13. }
  14. {
  15. println("i = " + i + "j = " + j)
  16. }
  1. // 九层金字塔
  2. // 每一层有2n-1个星号
  3. // 每层前面空 9-n 个空格
  4. object test {
  5. def main(args: Array[String]): Unit = {
  6. for (i <- 1 to 9; stars = 2 * i -1; spaces = 9 - i) {
  7. println(" " * spaces + "*" * stars)
  8. }
  9. }
  10. }

循环返回值

默认情况,for返回值为Unit
如果for中出现yield,for就称为推导式
yield理解为在循环体中构建出一个集合

  1. // 生成一个集合类型作为for循环的返回值
  2. val b = for (i <- 1 to 10) yield i
  3. println("b = " + b)
  4. /*
  5. b = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  6. */

while循环

因为while没有返回值,所以当要用该语句来计算返回结果时,不可避免的使用变量,而变量需要声明在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用

循环中断

采用异常方式退出循环

  1. try {
  2. for (i <- 0 until 5) {
  3. if (i == 3)
  4. throw new RuntimeException
  5. println(i)
  6. }
  7. } catch {
  8. case e: Exception => //什么都不做 退出循环
  9. }

使用Scala中的Breaks类的break方法,实现异常的抛出和捕捉

  1. import scala.util.control.Breaks._
  2. breakable(
  3. for (i <- 0 until 5) {
  4. if (i == 3)
  5. break()
  6. println(i)
  7. }
  8. )