当前位置: 首页 > news >正文

Scala流程控制

 

目录

单分支

双分支

多分支

 for 循环控制

循环守卫

 循环步长

循环嵌套

 循环返回值

 While 和 do..While 循环控制

While循环控制

do..While 循环控制

 循环中断


单分支

if	(条件表达式)	{执行代码块
}
var age = StdIn.readShort()if (age < 18){println("童年")
}

双分支

if (条件表达式) {执行代码块 1
} else {执行代码块 2
}
var age = StdIn.readShort()if (age < 18){println("童年")}else{println("成年")}

多分支

if (条件表达式 1) {执行代码块 1
}
else if (条件表达式 2) {执行代码块 2
……
else {执行代码块 n
}
println("input age")
var age = StdIn.readInt()if (age < 18){println("童年")
}else if(age>=18 && age<30){println("中年")
}else{println("老年")
}

Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件的代码体的最后一行内容

val res :String = if (age < 18){"童年"
}else if(age>=18 && age<30){"中年"
}else{"老年"
}println(res)

 for 循环控制

for(i <- 1 to 3){print(i + " ")
}
println()

<- 表示java里面的:,1 to 3 表示[1,2,3],前后闭合

循环守卫

for(i <- 1 to 3 if i != 2) { print(i + " ")
}
println()

        循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳过,类似于continue。

 

 循环步长

for (i <- 1 to 10 by 2) {println("i=" + i)
}

循环嵌套

		//两种写法效果相同,但是第二种能应对更多的情况for (i <- 1 to 2; j <- 1 to 2) {println(" i = " + i + " j = " + j)}for (i <- 1 to 2) {// some codefor (j <- 1 to 2) {println(" i = " + i + " j = " + j)}}
  • for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑
  • for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号, 当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号,如下
for {i <- 1 to 3 j = 4 - i
} {println("i=" + i + " j=" + j)
}

上面代码等价于

for (i <- 1 to 3) { var j = 4 - iprintln("i=" + i + " j=" + j)
}

 循环返回值

将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。

很少使用 ,了解即可

		var res = for (i <- 1 to 10) yield (i + 1)println(res)

 While 和 do..While 循环控制

While循环控制

循环变量初始化
while (循环条件) {循环体(语句) 循环变量迭代
}

 

  • 循环条件是返回一个布尔值的表达式
  • while 循环是先判断再执行语句
  • 与 for 语句不同,while 语句没有返回值,即整个 while 语句的结果是Unit 类型()
  • 因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量,而变量需要声明在 while 循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用 for 循环。
		var i = 1while (i < 5) {println(s"while第${i}次输出")i += 1}

 

do..While 循环控制

循环变量初始化; 
do{循环体(语句) 循环变量迭代
} while(循环条件)
  •  循环条件是返回一个布尔值的表达式
  • do..while 循环是先执行,再判断
		var i = 1do {println(s"这是do while第${i}次输出")i += 1} while (i < 5)

 

 循环中断

        Scala 内置控制结构特地去掉了 break 和 continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break 和continue 的功能,而不是一个关键字。Scala 中使用breakable 控制结构来实现 break 和 continue 功能。

 

import scala.util.control.Breaksobject TestContinue {def main(args: Array[String]): Unit = {Breaks.breakable(for (i <- 1 to 10) {if (i % 2 == 0) {Breaks.break()}println(i)})println("exit")}}

 

http://www.lryc.cn/news/41211.html

相关文章:

  • 人脸活体检测系统(Python+YOLOv5深度学习模型+清新界面)
  • prometheus03-如何导出prometheus指标
  • Linux驱动开发——串口设备驱动
  • LeetCode--缺失的第一个正数(41)和 接雨水(42)
  • java源码阅读---ReentrantLock源码解析
  • OpenCv + Qt5.12.2 文字识别
  • 网络作业1【计算机网络】
  • 常见背包问题
  • 【python】python编译器以及安装
  • Effective C++快速复习
  • 【华为OD机试真题JAVA】绘图机器的绘图问题
  • GPT-4最震撼我的一点
  • LeetCode-复制带随机指针的链表
  • 如何在Unity中实现AStar寻路算法及地图编辑器
  • 线性代数之矩阵
  • 【个人首测】百度文心一言 VS ChatGPT GPT-4
  • 基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)
  • Redis高级篇
  • sess.close()这句话一般是干什么的,在代码中可以不加么?
  • 网络舆情监测处置平台,TOOM舆情如何做好舆情风险点及防控措施?
  • 百度文心一言对标 ChatGPT,你怎么看?
  • 阿里笔试2023-3-15
  • STM32:TIM定时器输出比较(OC)
  • HTTPS 加密协议
  • 分布式锁和分布式事务
  • RK3568平台开发系列讲解(驱动基础篇)I2C协议介绍
  • HTML 音频(Audio)
  • 什么是Vue
  • python 内置函数和多线程
  • 【Spring】我抄袭了Spring,手写一套MySpring框架。。。