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:() /
```scalavar age: Int = 16val result: String = if (age <= 6) {println("童年")"童年" //如果定义返回值为String,每个分支都要写。如果每个分支想返回的类型不同,可以把if返回值定义为Any(公共父类)} else if(age < 18){println("青少年")"青少年"}println("result:" + result)/*输出结果:青少年result:青少年*/
Scala中没有三元运算符
Java: String res1 = (age>18) ? "成年" : "未成年"Scala: val res2: String = if (age > 18) "成年" else "未成年"
-
块表达式
值是最后一个表达式的值
val a = {println("1 + 1")1 + 1}println(a) // 2
for循环
范围遍历
// for(i <- 1.to(10)) 隐式转换// 包含边界for (i <- 1 to 10){ //println(i)}//不包含end,1-9for (i <- Range(1,10)){}for (i <- 1 until 10){}
集合遍历
for (i <- Array(12,23,44)) {}for (i <- List(12,34,54)) {}for (i <- Set(12,33,44)) {}
循环守卫
//java中for (int i = 1; i <= 10; i++) {if (i != 5){System.out.println(i);}}// Scala中没有continue关键字for (i <- 1 to 10 if i != 5) {println(i)}
循环步长
```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){}
<a name="Qwfj9"></a>### 循环嵌套```scalafor (i <- 1 to 3){for(j <- 1 to 3){println(i + j)}}for (i <- 1 to 4; j <- 1 to 5){println(i + j)}
//九九乘法表Object Test {def main(args: Array[String]): Unit = {for (i <- 1 to 9) {for (j <- 1 to i) {print(s"$j * $i = ${i * j} \t")}println()}// 简写for (i <- 1 to 9; j <- 1 to i) {print(s"$j * $i = ${i * j} \t")if (j == i) println()}}}
循环引入变量
for (i <- 1 to 10){val j = 10 - iprintln("i = " + i + "j = " + j)}//引入变量for (i <- 1 to 10; j = 10 -i){println("i = " + i + "j = " + j)}// 分行写使用花括号for {i <- 1 to 10j = 10 - i}{println("i = " + i + "j = " + j)}
// 九层金字塔// 每一层有2n-1个星号// 每层前面空 9-n 个空格object test {def main(args: Array[String]): Unit = {for (i <- 1 to 9; stars = 2 * i -1; spaces = 9 - i) {println(" " * spaces + "*" * stars)}}}
循环返回值
默认情况,for返回值为Unit
如果for中出现yield,for就称为推导式
yield理解为在循环体中构建出一个集合
// 生成一个集合类型作为for循环的返回值val b = for (i <- 1 to 10) yield iprintln("b = " + b)/*b = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)*/
while循环
因为while没有返回值,所以当要用该语句来计算返回结果时,不可避免的使用变量,而变量需要声明在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用
循环中断
采用异常方式退出循环
try {for (i <- 0 until 5) {if (i == 3)throw new RuntimeExceptionprintln(i)}} catch {case e: Exception => //什么都不做 退出循环}
使用Scala中的Breaks类的break方法,实现异常的抛出和捕捉
import scala.util.control.Breaks._breakable(for (i <- 0 until 5) {if (i == 3)break()println(i)})
