实现 Break 和 Continue|学习笔记

简介: 快速学习实现 Break 和 Continue。

开发者学堂课程【Scala 核心编程-基础:实现 Break 和 Continue】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8925


实现 Break 和 Continue

 

目录

一、讲解作业

二、while 循环的中断

三、如何实现 Continue 的效果

四、补充 Break 细节

 

一、讲解作业

有三个题目

1.100以内的数求和,求出当和第一次大于20的当前数【for】

2.实现登录验证,有三次机会,如果用户名为“张无忌”,密码“888”提升登录成功,否则提示还有几次机会,请使用 for 循环完成。

3.某人有100000元,每经过一次路口,需要交费,规则如下:

(1)当现金>50000时,每次交5%

(2)当现金<=50000时,每次交1000

编程计算该人可以经过多少路口,使用方式完成

第二题和第三题在做 Java 的时候已经讲过,现在就可以把以前 Java 写过的代码改成 Scala。

比如说做第一道题的时候,它会使用到 Break 的效果。

 

二、while 循环的中断

1.基本说明

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

2.为什么去掉 break 和 continue

因为 Scala 设计者马丁,他认为 break 和 continue 不属于 oop 的一个范畴;他认为这个关键字它既不是 opp 的,也不是函数式变成的。因此,他就把这两个关键字拿掉了。拿掉了之后它使用函数式的

3.while 循环的中断说明

这里虽然写的是 while 循环的中断,但是这个效果也可以使用在 dowhile 或者是 for 循环。

一种风格来实现 break 和 continue 的效果。主要就是 break 就是 break,而不是一个关键字。

4.案例演示

(1)原代码

import util.control.Break._

var n = 10

breakable{

while(n <=20) {

n += 1

if(n == 18) {

braek()

}

}

image.png

(2)讲解代码

var n = 10是一个变量

其中有一个 while 循环

while(n <=20) {

n += 1

if(n == 18) {

braek()

}

在while循环里面对循环变量 n 不停地对+1

+1完了之后,如果发现 n == 18,它就调用了一个 braek 函数

braek 函数的作用是抛出一个异常,这个异常会被 breakable 进行一个处理

(3)书写代码

创建一个包:break 不能直接作为包名

创建一个名为 mybraek 的包

package com.atguigu.chaper04.mybreak

import util.control.Breaks._

object WhileBreak {

def main(args:Array[String]): Unit = {

var n = 1 //输入代码

while (n <= 20) { //如果 n<= 20就要进入 while 循环里面去

n += 1 //每进一次,就让 n+1

//加完之后就做一个判断

println("n=" + n)

if (n == 18)  { //如果 n=18

//中断 while 循环

//说明

//1.在 scala 中使用函数式的 break 函数中断循环

//2.def braeak(): Nothing = { throw braeakException }

braeak()

//前面需要引入 import util.control.Break._

点开 braeak

def braeak()是一个函数-def 是函数的关键字

这里其实是扔出去了一个异常

如果出现 Nothing 就说明这一个函数就是一个非正常的中断或者是一个非正常的执行

这里就是用 def braeak(): Nothing = { throw braeakException }抛出一个异常

image.png

}

}

//如果在这里增加 ok~~

println("ok~~")

}

执行

image.png

image.png

因为在代码里面是 n+1,所以开始就是 n=2开始,一直到 n=18。再抛出一个异常 Exception in thread "main" scala.util.control.BreakControl

抛出异常之后,因为没有处理异常,所以 ok~~没有被输出,因为程序异常而中断了。

这样就引出了让代码继续执行

(4)breakable

import util.control.Breaks._

object WhileBreak {

def main(args:Array[String]): Unit = {

var n = 1

//breakable()函数

image.png

//添加 breakable 函数的时候,这里有一个参数 op: => Unit

//这里 breakable 是一个高阶函数,正常情况下,需要把 breakable 后面代码全部包起来:breakable 后面是一个(),breakable 是(,)放在代码最后

//包起来之后。做一个说明

//说明

//1.breakable 是一个高阶函数:可以接收函数的函数就是高阶函数(后面详解)

//2.def breakable (op: => Unit0) {

def breakable (op: => Unit0)是一个函数

op 是函数代表的名称,如果 op:后面没有值就代表它接收的是一个没有输入(没有形参、没有返回值)的函数

//点开 breakable,出现下图

image.png

//将图中代码移动到本代码中

//def breakable (op: => Unit0)

//try {

//op

//} catch {

//case ex: BreakControl =>

//if (ex ne breakException) throw ex

//}

//}

//将图中代码注释(前面全部加//)

//(1)op: => Unit0 表示接收的参数是一个没有输入,也没有返回值的函数

//(2)既可以简单理解可以接收一段代码块

//相当于 breakable 把后面的代码作为一个代码块全部传给了 op

//3.breakable 对 break()抛出的异常做了处理,代码就可以继续执行

//4.但我们传入的是代码块,scala 程序员会将()改成[]

//所以 println("ok~~")就会正常输出

breakable(

while (n <= 20) {

n += 1

println("n=" + n)

if (n == 18)

//中断 while 循环

//说明

//1.在 scala 中使用函数式的 break 函数中断循环

//2.def braeak(): Nothing = { throw braeakException }

braeak()

println("ok~~")

}

}

执行

ok~~就执行出来了

image.png

(5)完整代码输出

import util.control.Breaks._

object WhileBreak {

def main(args:Array[String]): Unit = {

var n = 1

//breakable()函数

//说明

//1.breakable 是一个高阶函数:可以接收函数的函数就是高阶函数(后面详解)

//2.def breakable (op: => Unit0) {

//def breakable (op: => Unit0)

//try {

//op

//} catch {

//case ex: BreakControl =>

//if (ex ne breakException) throw ex

//}

//}

//(1)op: => Unit0 表示接收的参数是一个没有输入,也没有返回值的函数

//(2)既可以简单理解可以接收一段代码块

//3.breakable 对 break()抛出的异常做了处理,代码就可以继续执行

//4.但我们传入的是代码块,scala 程序员会将()改成[]

breakable(

while (n <= 20) {

n += 1

println("n=" + n)

if (n == 18)

//中断 while 循环

//说明

//1.在 scala 中使用函数式的 break 函数中断循环

//2.def braeak(): Nothing = { throw braeakException }

braeak()

}

}

println("ok~~")

}

}

 

三、如何实现 Continue 的效果

1.说明

Scala 内置控制结构特地也去掉了 continue,是为了更好的适应函数化编程,可以使用 if-else 或是循环守卫实现continue 的效果。

2.案例

for(i<-1 to 10 if (i != 2 && i != 3)) {

println("i=" +i)

}

3.代码

package com.atguigu.chapter04.mycontinue

object ContinueDemo {

def main(args: Array[String]):Unit = {

//说明

//1. 1 to 1.

//2.循环守卫  if (i != 2 && i != 3)这个为真,才执行循环体

//即当 i == 2 或者 i == 3时,就跳过

for(i<-1 to 10 if (i != 2 && i != 3)) {

println("i=" +i)

}

}

执行

image.png

2和3就跳过了

其他形式

println("=============================")

for(i<-1 to 10) {

if (i != 2 && i != 3) {

println("i=" +i)

}

}

执行效果一样

 

四、补充 Break 细节

braeak()

}

}

println("ok~~")

//注意 break 函数,可以使用再 for 或者 do..while

breakable

for (i <- 1 to 100) {

println("i=" + i)

if (i == 20 ) {

}

}

}

println("ok2~~~~")

}

}

执行

i 不停地找,就找到了 ok~~

 image.png

然后继续找到20,找到20之后,就 break

image.png

相关文章
|
存储 机器学习/深度学习 算法
Python 图像处理实用指南:1~5
Python 图像处理实用指南:1~5
1419 0
|
前端开发 数据可视化 网络协议
GIS前端-图形样式编辑
GIS前端-图形样式编辑
257 0
|
SQL 消息中间件 存储
Flink报错问题之Flink报错:Table sink 'a' doesn't support consuming update and delete changes which is produced by node如何解决
Flink报错通常是指在使用Apache Flink进行实时数据处理时遇到的错误和异常情况;本合集致力于收集Flink运行中的报错信息和解决策略,以便开发者及时排查和修复问题,优化Flink作业的稳定性。
|
移动开发 搜索推荐 UED
HTML5的新语义化标签
HTML5引入的这些新语义化标签,通过明确标识内容的结构和意义,使得网页结构更加清晰,易于理解和维护。使用这些标签不仅提升了网页的可读性和可访问性,还增强了搜索引擎和辅助技术对网页内容的解析能力。在实际开发中,合理使用这些语义化标签,能够显著提升网页的质量和用户体验。
443 49
|
存储 算法 Nacos
Nacos支持哪些协议
Nacos支持哪些协议
|
机器学习/深度学习 数据采集 人工智能
人工智能与机器学习的前景和挑战
人工智能和机器学习的前景是令人振奋的,它们在许多领域带来了创新和变革。然而,随着前景的广阔,也伴随着一些挑战,如数据质量、隐私和伦理问题。通过持续的研究和努力,我们有望克服这些挑战,实现人工智能和机器学习的更大潜力。从自动驾驶汽车到医疗诊断,从自然语言处理到工业自动化,人工智能和机器学习将继续塑造我们的世界。
1072 1
人工智能与机器学习的前景和挑战
|
9月前
|
数据可视化 数据挖掘 数据处理
可视化的力量 | 电商运营决策?桑基图来助力
可视化的力量 | 电商运营决策?桑基图来助力
283 2
|
消息中间件 存储 Cloud Native
基于 RocketMQ 的云原生 MQTT 消息引擎设计
本文将介绍阿里云如何将 Serverless 架构应用于消息队列,有效降低运营成本,同时利用云原生环境的特性,为 IoT 设备提供快速响应和灵活伸缩的通讯能力。
512 114
|
监控 安全 物联网
5G技术的革命性进步及其对社会的影响
5G技术作为移动通信领域的革命性进步,正深刻地影响着我们的生活和社会。它不仅提供了更快的数据传输速率和更低的延迟,还将引领着各个领域的创新和发展。从移动通信、工业、医疗到智能城市,5G技术正在改变着我们的世界,为未来带来更多可能性。然而,我们也需要解决一些挑战,确保5G技术的安全和可持续发展。随着技术的不断进步,5G技术的前景依然充满希望,将为我们的社会带来更多的创新和变革。
1489 1
5G技术的革命性进步及其对社会的影响
|
消息中间件 Java Docker
RabbitMQ入门指南(一):初识与安装
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了消息队列、RabbitMQ简介及其安装步骤等内容。
306 0
RabbitMQ入门指南(一):初识与安装