本文最后更新于 2021-08-05 11:42:59
流程控制
分支
单分支
1 2 3 4 5 6 7 8
| if (条件表达式) { 执行代码块 }
var i = if(a>b) a else b
|
双分支
1 2 3 4 5
| if (条件表达式) { 执行代码块1 } else { 执行代码块2 }
|
多分支
1 2 3 4 5 6 7 8 9 10
| if (条件表达式1) { 执行代码块1 } else if (条件表达式2) { 执行代码块2 } …… else { 执行代码块n }
|
嵌套分支
1 2 3 4 5
| if(){ if(){ }else{ } }
|
For循环
普通for循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| for(i <- 1 to 3){ print(i + " ") } println()
for(i <- 1 until 3) { print(i + " ") }
for(i<- 1 to 100 reverse){ }
for(i<-100 to 1 by -1){ }
println()
|
循环守卫
1 2 3 4 5 6
| for(i <- 1 to 3 if i != 2) { print(i + " ") } println()
|
循环步长
1 2 3 4 5 6 7 8 9 10
| for(i <- 1 to (100,2)){ }
for (i <- 1 to 10 by 2) { println("i=" + i) }
|
引入变量
for推导式一行中有多个表达式时,所以要加;来隔断逻辑
for推导式有一个不成文的约定:当for推导式仅包含单一表达式时使用圆括号,当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| for(i <- 1 to 3; j = 4 - i) { println("i=" + i + " j=" + j) }
for { i <- 1 to 3 j = 4 - i } { println("i=" + i + " j=" + j) }
for (i <- 1 to 3) { var j = 4 - i println("i=" + i + " j=" + j) }
for(i<-1 to 100 if i%2==0;j=i*i if j<10000;k=j*j if k<10000){ }
|
循环返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| val res = for(i <- 1 to 10) yield i println(res)
object TestFor {
def main(args: Array[String]): Unit = {
var res = for( i <-1 to 10 ) yield { i * 2 }
println(res) } }
|
跳出循环
scala没有跳出循环 break的关键字
但是可以通过抛异常的方式跳出循环、
demo:判断一个数是不是质数
1 2 3 4 5 6 7 8 9 10 11 12 13
| val input = StdIn.readInt() var isPriam =true for(i<- 2 until input){ if(input%i==0){ isPriam=false }
} if(isPriam){ println(s"$input 是质数") }else{ println(s"$input 不是质数") }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| val input = StdIn.readInt() var isPriam =true try{ for(i<- 2 until input){ if(input%i==0){ isPriam=false throw new IllegalArgumentException }
} }catch { case _ => }
if(isPriam){ println(s"$input 是质数") }else{ println(s"$input 不是质数") }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import scala.util.control.Breaks
val input = StdIn.readInt() var isPriam =true Breaks.breakable{ for(i<- 2 until input){ if(input%i==0){ isPriam=false Breaks.break() }
} }
if(isPriam){ println(s"$input 是质数") }else{ println(s"$input 不是质数") }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import scala.util.control.Breaks._
val input = StdIn.readInt() var isPriam =true breakable{ for(i<- 2 until input){ if(input%i==0){ isPriam=false break }
} }
if(isPriam){ println(s"$input 是质数") }else{ println(s"$input 不是质数") }
|
循环嵌套
1 2 3 4 5
| for(i<-1 to 9;j<- 1 to i){ print(s"$j * $i = ${i*j}\t") if(i==j) printlln() }
|
While循环
先判断再执行
因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量,而变量需要声明在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,也就违背了函数式编程的重要思想(输入=>函数=>输出,不对外界造成影响),所以不推荐使用,而是推荐使用for循环。
1 2 3 4 5
| var i = 0 while (i < 10) { println(i) i += 1 }
|
do..while
先执行再判断
1 2 3 4 5 6
| var i = 0 do { println( i) i += 1 } while (i < 10)
|