专业编程基础技术教程

网站首页 > 基础教程 正文

scala学习之scala流程控制 scala语句

ccvgpt 2024-10-12 13:42:19 基础教程 10 ℃

scala流程控制

主要有三大流程控制语句

  • 顺序控制
  • 分支控制
  • 循环控制

顺序控制

顺序控制就是按照代码所写顺序从上到下依次执行,这个和java是一样的

scala学习之scala流程控制 scala语句

分支控制

分支控制与java也大致相同,使用if…else if…else来执行

val age = 19
if(age > 22){
  println("这么大岁数了,什么时候结婚生孩子呀")
} else if(age > 18) {
  println("有对象了吗")
} else if(age > 16) {
  println("好好学习,可不能早恋耽误学习")
} else {
  println("你还小")
}

循环控制

for循环

scala中的for循环与java中的for循环写法还是差距很大的

范围数据循环方式

使用to,左闭右闭,包含start和end

// i表示循环的变量
// <- 将数值赋给i
// 1 to 3  从1-3循环,to关键字,从start到end,这个是前后闭合的
for (i <- 1 to 3) {
  //1  2  3  
  print(i + "\t")
}

使用until,左闭右开,包含start不包含end

for (i <- 1 until 3) {
  //1  2 
  print(i + "\t")
}

也可以对集合进行遍历

var myArray:Array[Int] = Array(1,3,5,7,9)
for(item <- myArray){
  print(item+"\t")
}

for循环中的循环守卫

在遍历的同时增加判断条件,如果判断条件为true,则进入循环,否则,跳过此次循环,进行下一次循环,相当于continue

// 只有i不等于2的时候才会执行
for (i <- 1 to 3 if i != 2) {
  // 1 3
  print(i+"\t")
}

// 上面得操作等价于
for (i <- 1 to 3) {
  if (i != 2){
    // 1 3
      print(i+"\t")
  }
}

for循环中引入变量

可以在遍历元素的同时,对元素进行其他操作

// 注意两个操作之间有; 不然编译器不知道逻辑
for (i <- 1 to 3; j = i + 4) {
  // 5 6  7
  print(j + "\t")
}

while循环

while循环与java的用法相似,不过scala不推荐使用while循环,而推荐使用for循环(由于scala不推荐使用外部变量)

var i = 0
while (i < 10) {
  println("line" + i)
  i += 1
}

do…while循环

do…while循环与java用法也相似,先执行再判断

var i = 0;
do {
  println("line" + i)
  i += 1
} while (i < 10)

循环的中断

scala中取消了关键字break和continue,而采用了函数的方式来实现了循环的中断来代替break和continue

break()函数

// 使用break()需要引入
import scala.util.control.Breaks._


for(i<- 1 to 10){
  if(i % 5 == 0){
    // def break(): Nothing = throw breakException
    break()
  }
  print("i="+i+"\t")
}

// i=1    i=2 i=3 i=4 Exception in thread "main" scala.util.control.BreakControl

可以看到break()中就是抛出一个异常,而由于异常没有处理,所以导致执行中断了,但是这个操作不只是中断了循环,直接将程序中断了

可以使用breakable()来捕获该异常,这样后续程序就可以执行了

// def breakable(op: => Unit): Unit =
//    try op catch { case ex: BreakControl if ex eq breakException => }
// breakable是专门来捕获breakException异常的,并且捕获之后什么都不做
breakable(
  for(i<- 1 to 10){
    if(i % 5 == 0){
      // def break(): Nothing = throw breakException
      break()
    }
    print("i="+i+"\t")
  }
)

Tags:

最近发表
标签列表