网站首页 > 基础教程 正文
scala流程控制
主要有三大流程控制语句
- 顺序控制
- 分支控制
- 循环控制
顺序控制
顺序控制就是按照代码所写顺序从上到下依次执行,这个和java是一样的
分支控制
分支控制与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")
}
)
猜你喜欢
- 2024-10-12 Scala初学者入门指南!涵盖20多个基本技巧
- 2024-10-12 Scala循环性能问题,为了性能,你愿意牺牲代码的可维护性么?
- 2024-10-12 使用Apache Kafka时的7个错误 apache kafka实战pdf
- 2024-10-12 scala中为什么不建议用return scala for until
- 2024-10-12 scala——泛型方法、类、特质的使用,泛型边界、协变逆变非变
- 2024-10-12 程序员构建总是出问题,怎么办? 程序员构建总是出问题,怎么办呢
- 2024-10-12 scala——列表、元祖、列表相关知识
- 2024-10-12 scala语言基础图解-第一阶段(变量-条件-循环-方法-函数-集合)
- 2024-10-12 Scala入门视频已更新至88讲,后续还有大约20讲左右的视频就结束
- 2024-10-12 Scala快速入门 - 环境安装篇 scala安装步骤
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)