Scala中的while循环

93 阅读3分钟

1.什么是while?

Scala中的while循环是一种基础的控制流结构,其核心机制是通过持续检查布尔条件来决定是否重复执行循环体23。以下是关键特性描述:

执行机制

采用‌先判断后执行‌的模式,当条件表达式(condition)评估为true时,循环体内的语句会重复执行;一旦条件变为false,循环立即终止,程序继续执行后续代码34。与for循环不同,while循环可能一次都不执行(若初始条件为false)3。

返回值特性

Scala的while循环‌不返回具体值‌,其结果为Unit类型(即()),这与条件表达式if的返回值行为形成鲜明对比14。因此若需通过循环计算结果,通常需依赖外部变量,但这种方式可能引入副作用,故更推荐使用for循环或递归替代12。

语法示例

基础语法结构如下:

scalaCopy Code
while (condition) {
  // 循环体语句
}

例如,循环输出变量a的值直至其达到20:

scalaCopy Code
var a = 10
while (a < 20) {
  println(s"Value of a: $a")
  a += 1
}

该示例展示了典型的计数器控制循环流程3。

适用场景与局限

适用于‌条件驱动‌的重复操作(如读取流数据),但Scala更鼓励使用函数式范式(如for推导式或尾递归)来处理迭代,以避免可变状态带来的复杂性25。


object xh2 {
  def main(args: Array[String]): Unit = {
    /* // 把 1.2.3.4.5......100 中的所有数输出
    var i = 1
    while(i <= 100){
      println(i)
      i += 1
    }

     */
    // 把 1.2.3.4.5......100 中的所有奇数输出
    var i = 1
    while(i <= 100) {
      println(i)
      i += 2
    }
  }
}

输出1~100内的奇数,每个一行 求1-100的和

[object Main {]()  
  def main(args: Array[String]): Unit = {  
    var sum:Int = 0  
    var i = 1  
    while(i <= 100){  
      sum += i  
      i += 1  
    }  
    println(sum)  
  }  
}

求1/2 + 1/3 +......1/100的和

Snipaste_2025-09-23_09-51-50.png

2.while对的死循环

在需要一直执行的时候,就可以使用死循环。例如,不停地判断用户的输入的内容是否是闰年。

object xh3 {
  def main(args: Array[String]): Unit = {
    while(true) {
      print("请输入要判断的年份(输入0就结束判断):")
      //判断用户输入的年份是否是闰年
      val year = scala.io.StdIn.readInt()
      if(year % 400 == 0 || (year %4 ==0 && year%100 !=0 )){
        println(s"{year} 是闰年")
      } else { println(s"{year} 不是闰年")
      }
    }
  }
}

3.break

scala中没有现成的break关键字,而是使用面向对象的方式来代替,底层会抛出异常来跳出循环,外层捕获异常。

import scala.util.control.Breaks.{break, breakable}

object xh4 {
  def main(args: Array[String]): Unit = {
    // 输入年份并判断
    breakable {
      while (true) {
        println("请输入年份(输入0则退出):")
        val year = scala.io.StdIn.readInt()
        if (year == 0) {
          break
        }
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
          println(s"{year}是闰年") } else { println(s"{year}不是闰年")
        }
      }
    }
    println("完成判断... 按任意键退出")
  }
}

运行结果如下:

运行结果.png

4.do while循环

格式:

do   
   statement(s);  
} while( condition );

如下代码是do while 循环的实际使用,以及一些注意事项和注释:

object xh5 {
  def main(args: Array[String]): Unit = {
    // do while: 无论条件是否成立,都会执行一次!
    // while: 如果条件不成立,不执行!
    //    var i = 100
    //    do {
    //      println(i)
    //i += 1
    //} while(i <= 10)


    var i = 100
    while (i <= 10) {
      println(i)
      i += 1
    }
  }
}