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.lengthfor (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 = 0while (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)      )    }}