1. * java流程控制:<br /> * 分支: if-else \ switch<br /> * 循环: for\while\do-while<br /> * scala中删除了switch分支控制。<br /> * scala中流程控制:<br /> * 分支: if-else<br /> * 循环: for\while\do-while

块表达式

块表达式: 由{ }包裹的一段代码称之为块表达式。
块表达式有返回值,返回值是{ }中最后一个表达式的结果值,看下面代码注释内容。
[ for\while\do-while中的{ }不认定为块表达式 ]

  1. package com.atguigu.chapter04
  2. object $01_Block {
  3. def main(args: Array[String]): Unit = {
  4. // 块表达式
  5. val r = {
  6. println("..............")
  7. val x =10
  8. val y=20
  9. val z = x+y//如果这句在块表达式最后,那么就没有返回值,因为这个语句是一个赋值过程,而未含有具体结果
  10. z // z已经获得具体值,可以返回
  11. }
  12. 30
  13. }
  14. }

if语句

/*
【掌握】
分支控制:
条件匹配成功之后不会再运行其他语句。
1、单分支: if(..){…}
2、双分支: if(..){..} else {..}
3、多分支: if(..){..} else if(..){..}… else{…}
scala if分支控制有返回值,返回值为符合条件的分支的{ }中最后一个表达式的结果值[块表达式的值]
/

  1. package tcode.chapter04
  2. object $02_If {
  3. def main(args: Array[String]): Unit = {
  4. val a = 10
  5. //单分支,块表达式
  6. val r = if(a%2==0){
  7. println("a是2的倍数")
  8. 10
  9. }
  10. println(r)
  11. //双分支
  12. if(a%3==0){
  13. println("a是3的倍数")
  14. }else{
  15. println("a不是3的倍数")
  16. }
  17. //多分支
  18. val t = if(a%4==0){
  19. println("a是4的倍数")
  20. 10
  21. }else if(a%6==0){
  22. println("a是6的倍数")
  23. 30
  24. }else{
  25. if(a%5==0){
  26. println("a是5的倍数")
  27. 40
  28. }else{
  29. println("其他...")
  30. 50
  31. }
  32. }
  33. println(t)// t=40
  34. }
  35. }

for循环

for两个重要方法
to:左右闭合 until:左闭右开
tart.to(end) 1.to(10)
start to end 1 to 10
start.until(end) 1.until(10)
start until end 1 until 10
语法
for循环基本语法: for( 变量 <- 数组/集合/表达式 ) { …. }
守卫: for( 变量 <- 数组/集合/表达式 if(布尔表达式) ) { …. }
使用条件:if语句前不能有其他语句
步长: for(变量<- start to/until end by step) {..}
说明:如:by 2 则每隔两个数字循环,1,3,5,7…
嵌套for: for( 变量1 <- 数组/集合/表达式 ;变量2 <- 数组/集合/表达式 ; .. ){…}
嵌套+守卫: for( 变量1 <- 数组/集合/表达式 if(布尔表达式) if(布尔表达式) ..;变量2 <- 数组/集合/表达式 if(布尔表达式); .. ){…}
yield表达式: for( 变量 <- 数组/集合/表达式 ) yield {…}
说明:样for的{}拥有返回值
引入变量:for(变量名<- 集合/数组/表达式;变量3=值;变量2<- start to 变量3)

/*
for循环两个重要方法:

  1. * for循环基本语法: for( 变量 <- 数组/集合/表达式 ) { .... }<br /> * 守卫: for( 变量 <- 数组/集合/表达式 if(布尔表达式) ) { .... }<br /> * 步长: for(变量<- start to/until end by step) {..}<br /> * 嵌套for: for( 变量1 <- 数组/集合/表达式 ;变量2 <- 数组/集合/表达式 ; .. ){...}<br /> * 嵌套+守卫: for( 变量1 <- 数组/集合/表达式 if(布尔表达式) if(布尔表达式) ..;变量2 <- 数组/集合/表达式 if(布尔表达式); .. ){...}<br /> * yield表达式: for( 变量 <- 数组/集合/表达式 ) yield {...}<br /> */
  1. package tcode.chapter04
  2. object $03_For {
  3. def main(args: Array[String]): Unit = {
  4. // for循环基本语法: for( 变量 <- 数组/集合/表达式 ) { .... }
  5. for(i<- 1 to 10){
  6. println(i)
  7. }
  8. println( "*" * 100 )
  9. //for循环嵌套if
  10. for(i<- 1 to 10){
  11. //println(s"i*i=${i*i}")
  12. if(i%2==0){
  13. println(i)
  14. }
  15. }
  16. println("+"*100)
  17. //守卫
  18. for(i<- 1 to 10 if(i%2==0)){
  19. println(i)
  20. }
  21. //步长
  22. for(i<- 1 to 10 by 2){
  23. println(s"i=${i}")
  24. }
  25. //嵌套for
  26. for(i<- 1 to 10){
  27. if(i%2==0){
  28. for(j<- i to 10){
  29. println(s"i+j=${i+j}")
  30. }
  31. }
  32. }
  33. println("-"*100)
  34. for(i<- 1 to 10 if(i%2==0); j<- i to 10 if(j%4==0)){
  35. println(s"i*j=${i*j}")
  36. }
  37. //yield表达式
  38. val r = for(i<- 1 to 10) yield {
  39. println(s"i=${i}")
  40. i * i
  41. }
  42. println(r)
  43. (1 to 10).foreach(println(_))
  44. }
  45. }

while

与java完全一致

  1. package tcode.chapter04
  2. object $04_While {
  3. //【掌握】
  4. //scala while与do-while完全一样
  5. def main(args: Array[String]): Unit = {
  6. var a = 11
  7. while ( a<=10 ) {
  8. println(s"a=${a}")
  9. a=a+1
  10. }
  11. var b=11
  12. do{
  13. println(s"b=${b}")
  14. b = b+1
  15. }while(b<=10)
  16. }
  17. }

BreakAndContine(了解)

/*
break: 结束整个循环
continue: 跳出当前循环,开始下一次循环

scala中没有break与continue关键字。
scala实现break:
1、导包: import scala.util.control.Breaks._
2、通过breakable、break方法实现
scala实现continue:
1、导包: import scala.util.control.Breaks._
2、通过breakable、break方法实现
/
breakable相当于try\catch
break方法其实就是java中的抛异常
image.png

  1. package tcode.chapter04
  2. import scala.util.control.Breaks._
  3. object $05_BreakAndContinue {
  4. def main(args: Array[String]): Unit = {
  5. //实现break
  6. var a=1
  7. try{
  8. while(a<=10){
  9. if(a==5) throw new Exception
  10. println(s"a=${a}")
  11. a=a+1
  12. }
  13. }catch {
  14. case e:Exception =>
  15. }
  16. //实现continue
  17. a=1
  18. while(a<=10){
  19. try{
  20. if(a==5) throw new Exception
  21. println(s"a=${a}")
  22. a=a+1
  23. }catch {
  24. case e:Exception => a=a+1
  25. }
  26. }
  27. println("*"*100)
  28. //scala break实现
  29. a=1
  30. breakable( {
  31. while(a<=10){
  32. if(a==5) break()
  33. println(s"a=${a}")
  34. a=a+1
  35. }
  36. } )
  37. //continue
  38. a=1
  39. while(a<=10){
  40. breakable({
  41. if(a==5) {
  42. a=a+1
  43. break()
  44. }
  45. println(s"a=${a}")
  46. a=a+1
  47. })
  48. }
  49. }
  50. }

迭代器遍历:

(1 until 10).foreach(index=>{…})