* 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中的{ }不认定为块表达式 ]
package com.atguigu.chapter04
object $01_Block {
def main(args: Array[String]): Unit = {
// 块表达式
val r = {
println("..............")
val x =10
val y=20
val z = x+y//如果这句在块表达式最后,那么就没有返回值,因为这个语句是一个赋值过程,而未含有具体结果
z // z已经获得具体值,可以返回
}
30
}
}
if语句
/*
【掌握】
分支控制:
条件匹配成功之后不会再运行其他语句。
1、单分支: if(..){…}
2、双分支: if(..){..} else {..}
3、多分支: if(..){..} else if(..){..}… else{…}
scala if分支控制有返回值,返回值为符合条件的分支的{ }中最后一个表达式的结果值[块表达式的值]
/
package tcode.chapter04
object $02_If {
def main(args: Array[String]): Unit = {
val a = 10
//单分支,块表达式
val r = if(a%2==0){
println("a是2的倍数")
10
}
println(r)
//双分支
if(a%3==0){
println("a是3的倍数")
}else{
println("a不是3的倍数")
}
//多分支
val t = if(a%4==0){
println("a是4的倍数")
10
}else if(a%6==0){
println("a是6的倍数")
30
}else{
if(a%5==0){
println("a是5的倍数")
40
}else{
println("其他...")
50
}
}
println(t)// t=40
}
}
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循环两个重要方法:
* 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 /> */
package tcode.chapter04
object $03_For {
def main(args: Array[String]): Unit = {
// for循环基本语法: for( 变量 <- 数组/集合/表达式 ) { .... }
for(i<- 1 to 10){
println(i)
}
println( "*" * 100 )
//for循环嵌套if
for(i<- 1 to 10){
//println(s"i*i=${i*i}")
if(i%2==0){
println(i)
}
}
println("+"*100)
//守卫
for(i<- 1 to 10 if(i%2==0)){
println(i)
}
//步长
for(i<- 1 to 10 by 2){
println(s"i=${i}")
}
//嵌套for
for(i<- 1 to 10){
if(i%2==0){
for(j<- i to 10){
println(s"i+j=${i+j}")
}
}
}
println("-"*100)
for(i<- 1 to 10 if(i%2==0); j<- i to 10 if(j%4==0)){
println(s"i*j=${i*j}")
}
//yield表达式
val r = for(i<- 1 to 10) yield {
println(s"i=${i}")
i * i
}
println(r)
(1 to 10).foreach(println(_))
}
}
while
与java完全一致
package tcode.chapter04
object $04_While {
//【掌握】
//scala while与do-while完全一样
def main(args: Array[String]): Unit = {
var a = 11
while ( a<=10 ) {
println(s"a=${a}")
a=a+1
}
var b=11
do{
println(s"b=${b}")
b = b+1
}while(b<=10)
}
}
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中的抛异常
package tcode.chapter04
import scala.util.control.Breaks._
object $05_BreakAndContinue {
def main(args: Array[String]): Unit = {
//实现break
var a=1
try{
while(a<=10){
if(a==5) throw new Exception
println(s"a=${a}")
a=a+1
}
}catch {
case e:Exception =>
}
//实现continue
a=1
while(a<=10){
try{
if(a==5) throw new Exception
println(s"a=${a}")
a=a+1
}catch {
case e:Exception => a=a+1
}
}
println("*"*100)
//scala break实现
a=1
breakable( {
while(a<=10){
if(a==5) break()
println(s"a=${a}")
a=a+1
}
} )
//continue
a=1
while(a<=10){
breakable({
if(a==5) {
a=a+1
break()
}
println(s"a=${a}")
a=a+1
})
}
}
}
迭代器遍历:
(1 until 10).foreach(index=>{…})