Scala的while语句循环

在 Scala 中,while 语句是一种常用的循环结构,用于重复执行一段代码块,直到指定的条件变为 false。它的语法和功能与 Java、C 等语言中的 while 循环类似,主要用于不确定循环次数但已知循环终止条件的场景。

基本语法

scala 复制代码
while (条件表达式) {
  // 循环体:当条件为true时执行的代码
}
  • 条件表达式 :返回布尔值(truefalse)。每次循环开始前会检查该条件,若为 true 则执行循环体,否则退出循环。
  • 循环体 :可以是单条语句或用 {} 包裹的多条语句(推荐始终用 {} 包裹,增强可读性)。

执行流程

  1. 检查 while 后的条件表达式。
  2. 若条件为 true,执行循环体中的代码,执行完毕后回到步骤 1 再次检查条件。
  3. 若条件为 false,直接退出循环,继续执行后续代码。

示例 1:基本用法

打印 1 到 5 的数字:

scala 复制代码
var i = 1  // 初始化循环变量
while (i <= 5) {  // 循环条件:i不大于5
  println(i)  // 循环体:打印i
  i += 1      // 更新循环变量(避免无限循环)
}

输出:

plaintext 复制代码
1
2
3
4
5

示例 2:无限循环与 break

Scala 本身没有内置的 break 关键字(用于强制退出循环),但可以通过 scala.util.control.Breaks 中的 breakbreakable 实现类似功能。

例如,找到第一个能被 7 整除的 100 以内的数:

scala 复制代码
import scala.util.control.Breaks._  // 导入break相关工具

var num = 1
breakable {  // 包裹可能需要break的代码块
  while (num <= 100) {
    if (num % 7 == 0) {
      println(s"找到第一个能被7整除的数:$num")
      break()  // 强制退出循环
    }
    num += 1
  }
}

输出:

plaintext 复制代码
找到第一个能被7整除的数:7

注意事项

  1. 循环变量初始化while 循环的变量需要在外部初始化(如示例中的 inum),否则可能导致编译错误。
  2. 避免无限循环 :循环体中必须包含更新循环变量的逻辑(如 i += 1),否则若条件始终为 true,会导致无限循环。
  3. 与 for 循环的区别while 循环更适合 "条件驱动" 的循环(不确定次数),而 for 循环更适合 "迭代范围明确" 的场景(如遍历集合)。
  4. 返回值while 循环在 Scala 中是语句 (statement),而非表达式(expression),没有返回值(返回 Unit 类型,类似 Java 中的 void)。

总结

while 循环是 Scala 中控制重复执行的基础结构,语法简洁,适用于基于条件的循环场景。如需在循环中提前退出,可借助 Breaks 工具类的 break 方法实现。

相关推荐
小Ti客栈3 小时前
Spring Boot 集成 Springdoc-OpenAPI 与 Knife4j实现接口文档与可视化调试
java·spring boot·后端
Ai拆代码的曹操3 小时前
Spring 事务 REQUIRES_NEW 嵌套调用:连接池翻倍的秘密
java·后端·spring
IT_陈寒5 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱5 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
Wang's Blog5 小时前
Go-Zero项目开发24: 基于Bitmap实现群聊消息已读未读
开发语言·后端·golang
Conan在掘金6 小时前
鸿蒙报错速查:struct 里嵌 namespace 声明就炸,根因 + 真解法
后端
东方小月6 小时前
从零开发一个 Coding Agent(三):EventStream 事件流通道设计与实现
前端·人工智能·后端
卫子miao6 小时前
如何评价当前大语言模型的记忆机制?
后端·架构
神奇小汤圆7 小时前
为什么 AQS 成为 Java 并发的基石?
后端
星栈8 小时前
MCP 从 stdio 迁到 SSE,踩了 5 个传输层坑
人工智能·后端·架构