Scala循环表达式

本文主要介绍Scala的循环表达式,包括while、do - while和for循环。阐述了各循环的语法、执行逻辑及实例,如while循环条件为true时持续执行,do - while至少执行一次,for循环功能强大,还介绍了for循环过滤、遍历集合及yield返回结果等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们来看看Scala的循环表达式。

在很多场景中我们需要将同样的操作执行多次,而一般的顺序执行语句只能执行一次,这就需要使用循环结构来完成,大部分编程语言中都提供了三种主要的循环结构(for、while和do...while),Scala也不例外。

f3ba250768910f517aab3af532c6784f.png

如果你是一个Java工程师,相信你可以很轻易的写出循环表达式,且看Java中是如何实现循环的。

while循环的实现如下,当然Java5之后还有增强型for循环,这里不再赘述:

while(条件){
    //可执行代码
}

for循环是这样写的:

for (初始化; 条件; 增加/递减) {
    //可执行代码
}

do...while循环是这样写的:

do{
//可执行代码
}while(条件);

那么在Scala我们应该怎么实现它们呢?且看下文分解。


while循环

while语句中只要布尔表达式为true,循环体中的可执行代码就会一直重复执行下去。

语法:

while(条件){
    //可执行代码
}

在循环体内,可执行代码是顺序执行的,这可以是单条语句,也可以是多条命令组成的代码块。

条件是一个布尔表达式,只要表达式的结果为true,循环就会不断执行下去,当条件为false的时候,则退出循环,执行后续的代码。

实例:

object WhileLoop extends App {
    var a =0; // 初始化
    while (a <= 5) {// 条件
        println(a)
        a = a +1// 计数增加
    }
}

执行结果:

0
1
2
3
4
5

在此,如果我们把条件改为 a <= -1,那么该循环一次都不会执行,也就是说当条件为false的时候,会直接跳过循环主体直接执行循环后续的代码。而如果我们条件始终为true那么它就是一个无限循环,永远也不会退出,除非程序异常或者我们强制关闭。

无限循环实例:

object WhileLoop extends App {
    var a =0; // 初始化
    while (true) { // 条件
        println(a)
        a = a +1// 计数增加
    }
}

执行结果:

……
20261
20262
20263
20264
20265
20266
20267
20268
20269
Process finished with exit code -1

do-while循环

do…while循环与while循环类似,不同之处在于do…while循环的布尔表达式是在执行一次之后做的判断,也就是说while循环中,如果条件为false,则无法进入循环体。但是do…while循环则不一样,它至少会执行一次。

语法:

do{
//可执行代码
}while(条件)

实例:

object DoWhileLoop extends App {
    var a =0; // 初始化
    do {
        println(a)
        a = a +1// 计数增加
    } while (a <= 5)// 条件
}

执行结果:

0
1
2
3
4
5

在此,如果我们把条件改为 a <= -1,则循环体仍然会被执行一次

a <= -1输出结果为:

0

同样的,如果我们将条件改为true那么它就是一个无限循环,永远也不会退出,除非程序异常或者我们强制关闭。

条件始终为true执行结果:

……
20261
20262
20263
20264
20265
20266
20267
20268
20269
Process finished with exit code -1

for循环

Scala提供的for循环功能十分强大简洁,虽然所有的循环结构都可以用while或者do…while 来实现,但是Scala的for循环功能不仅仅于此。

语法:

for( i <- range){
// 代码块
}

我们可以看到,这里的语法已经和Java语言的for循环有所不同了。range是一个区间,可以用to或者until来表示。箭头<- 表示向i赋值。

实例:

object ForLoop extends App {
    for (i <- 1to10) println(i)
}

输出结果:

1
2
3
4
5
6
7
8
9
10
for循环过滤

在for中添加条件表达式可以达到过滤的效果

语法:

for( i <- range condition1; condition1...){
// 代码块
}

实例:

for (i <- 1 to 10 if i % 2==0 if i % 3==0) println(i)

输出结果:

6
for遍历集合

通过for可以遍历集合,这里类似于Java的增强for循环,语法如下:

语法:

for( i <- Collection){
// 代码块
}

实例:

object ForLoop extends App {
    val cities = List("NanJing", "SuZhou", "WuXi",
        "TaiZhou", "XuZhou", "BeiJing")
    for (city <- cities) println(city)
}

输出结果:

NanJing
SuZhou
WuXi
TaiZhou
XuZhou
BeiJing
Yielding

通过yield可以返回for循环过滤的结果

语法:

for( i <- Collection if condition...){
// 代码块
}

实例:

object ForLoop extends App {
        val beijing = for (city <- cities if city == "BeiJing") yield city
        println(beijing)
}

输出结果:

List(BeiJing)

从输出我们也可以看到,返回的是一个集合类型的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值