分支
单分支
if (条件表达式) {
执行代码块
}
双分支
if (条件表达式) {
执行代码块 1
} else {
执行代码块 2
}
多分支
if (条件表达式 1) {
执行代码块 1
}
else if (条件表达式 2) {
执行代码块 2
}
……
else {
执行代码块 n
}
Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件的
代码体的最后一行内容
var age = StdIn.readInt()
val res :String = if (age < 18){
"1"
}else if(age>=18 && age<30){
"2"
}else{
"3"
}
println(res)
}
嵌套分支
if(){
if(){
}else{
}
}else{
}
循环
范围遍历
i 表示循环的变量,<- 规定 to
i 将会从 1-10 循环,前后闭合
for(i <- 1 to 10){
println(i)
}
//方法调用与其同理
for(i <- 1.to(10)){
println(i)
}
不含边界范围遍历
//使用Range对象
for(i <- Range(1,10)){
println(i)
}
for(i <- 1 until 10){
println(i)
}
遍历集合类型
for(i <- Array(1,2,3,4,5,6)){
println(i)
}
for(i <- List(1,2,3,4,5,6)){
println(i)
}
for(i <- Set(1,2,3,4,5,6)){
println(i)
}
循环保护式
for(i <- 1 to 10 if i !=5){
println(i)
}
循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环 体内部,为 false 则跳过,类似于 continue。
循环步长
for(i <- 1 to 10 by 2){
println(i)
}
//浮点步长
for(i <- 1.0 to 10.0 by 0.5){
println(i)
}
嵌套循环
for(i <- 1 to 10 by 1){
for(j <- 1 to 10 by 1){
println(i,j)
}
for(i <- 1 to 10; j <- 1 to 10){
println("i="+i+"j="+j)
}
实现九九乘法表
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(j)
}
//for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑
for (i <- 1 to 10; j = 10 - i){
println(j)
}
//for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号,当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号,如下
for {i <- 1 to 10;
j = 10 - i
k = i - 1}{
println(j)
println(k)
}
倒序打印
for(i <- 1 to 10 reverse){
println(i)
}
循环返回值
val a = for (i <- 1 to 10) yield i
println(a)
将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。
while循环
var a = 10
while (a >= 1){
println("123")
a -= 1
}
do while
var a = 0
do{
println(1)
a -= 1
} while (a>0)
}
循环中断
try {
for (i <- 0 until 10) {
if (i == 3)
throw new RuntimeException
println(i)
}
}catch {
case e: Exception =>
}
Scala 内置控制结构特地去掉了 break 和 continue,是为了更好的适应函数式编程,推 荐使用函数式的风格解决break和continue的功能,而不是一个关键字。Scala中使用breakable 控制结构来实现 break 和 continue 功能。
Breaks.breakable(
for (i <- 0 until 10){
if (i == 3)
Breaks.break()
println(i)
}
)