乐趣区

关于scala:Scala-流程控制

if

用 if 做流程管制的时候,包含单分支、双分支、多分支。
比方 java 是这样写的。

public static void main(String[] args) {
    int num = 10;
    if (num == 10) {System.out.println("equal 10");
    }

    if (num > 5) {System.out.println("greater than 5");
    } else {System.out.println("less than 5");
    }

    if (num < 5) {System.out.println("less than 5");
    } else if (num > 20) {System.out.println("greater than 20");
    } else {System.out.println("greater than 5 and less than 20");
    }
}

Scala 也是相似的:

def main(args: Array[String]): Unit = {
    val num = 10
    if (num == 10) println("equal 10")

    if (num > 5) println("greater than 5")
    else println("less than 5")

    if (num < 5) println("less than 5")
    else if (num > 20) println("greater than 20")
    else println("greater than 5 and less than 20")
}

然而 Scala 的表达式是有返回值的,所以他还能够这样:

  • 如果没有指定变量的类型,那编译器会主动推断
  • 如果没有写 else,那会默认 else (),所以 x1 打印的就是()
  • 如果是块表达式,那返回值就是最初一行
def main(args: Array[String]): Unit = {
    var num = 10
    var x = if (num > 5) 5
    println(x) // 5
    var x1 = if (num > 20) 5
    println(x1) //()
    var y = if (num > 5) {println("num")
      5
    }
    println(y) //5
    var z = if (num > 20) 20 else 5
    println(z) //5
}

for

Scala 中 for 的语法为:for (i <- 表达式 / 数组 / 汇合),i 是循环的变量
比方输入 0 到 5,在 java 是这样写的:

for (int i = 0; i < 5; i++) {System.out.println(i);
}

在 Scala 是这样写的,to 和 until 的区别是,to 包含前面的数字,until 不包含前面的数字.

for (i <- 0 to 4) println(i)
for (i <- 0 until 5) println(i)

比方输入数组的信息,java 是这样写的:

String[] arr = new String[]{"a", "b", "c"};
int length = arr.length;
for (int i = 0; i < length ; i++) {System.out.println(arr[i]);
}
for (String str : arr) {System.out.println(str);
}

在 Scala 是这样写的

val length = arr.length
for (i <- 0 to length - 1) println(arr(i))
for (i <- arr) println(i)

比方在输入 0 到 5 的时候,不输入 3,java 是这样写的:

for (int i = 0; i < 5; i++) {if (i != 3) {System.out.println(i);
    }
}

scala 是这样写的:

for (i <- 0 to 4) {if (i != 3) println(i)
}

也能够这样写,把条件写在 for 外面:

for (i <- 0 to 4 if i != 3) println(i)

二维数组的打印,java 是这样写的:

for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {System.out.println("i=" + i + ",j=" + j);
    }
}

scala 是这样写的:

for (i <- 0 until 2; j <- 0 until 2) println("i=" + i + ",j=" + j)

while

while 的用法,就和 java 那边根本是一样了,比方打印 0 到 5 的语句:

var num = 0
while (num < 5) {println(num)
  num += 1
}

中断

在 java 中,咱们用 break 和 continue 对 for 或者 while 进行跳出循环或者跳出以后循环的。scala 是用 breakable 这个高阶函数来做的。
比方输入 0 到 4,当到 3 的时候跳出循环。
java 是这样写的:

public static void main(String[] args) {for (int i = 0; i < 5; i++) {if (i == 3) {break;}
        System.out.println(i);
    }
}

scala 是这样写的:

import util.control.Breaks._
def main(args: Array[String]): Unit = {
    breakable(for (i <- 0 until 5) {if (i == 3) {break()
        }
        println(i)
      }
    )
}

比方输入 0 到 4,当到 3 的时候跳出以后循环。
java 是这样写的:

public static void main(String[] args) {for (int i = 0; i < 5; i++) {if (i == 3) {continue;}
        System.out.println(i);
    }
}

scala 是这样写的:

import util.control.Breaks._
def main(args: Array[String]): Unit = {for (i <- 0 until 5) {
      breakable(if (i == 3) {break()
        }else
        println(i)
      )
    }
}
退出移动版