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:() /
```scala
var age: Int = 16
val 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-9
for (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>
### 循环嵌套
```scala
for (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 - i
println("i = " + i + "j = " + j)
}
//引入变量
for (i <- 1 to 10; j = 10 -i){
println("i = " + i + "j = " + j)
}
// 分行写使用花括号
for {
i <- 1 to 10
j = 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 i
println("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 RuntimeException
println(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)
}
)