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的和
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("完成判断... 按任意键退出")
}
}
运行结果如下:
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
}
}
}