我们来看一种更加简洁的循环:for循环
分为下面五个部分:
1.for循环的基本使用
2.for循环守卫
3.循环步长
4.循环的返回值
5.continue语句
问题导入例如:小球从100米高处自由落下,着地后又弹回高度的一半再次落下,如此重复。问经过多少次落地后,小球弹起的高度才会低于0.5米?
运用while循环
object Main {
def main(args: Array[String]): Unit = {
var height = 100.0 // 初始高度100米
var count = 0 // 落地次数
println("小球弹跳过程:")
println(f"初始高度:$height%.2f米")
while (height >= 0.5) {
count += 1
height = height / 2 // 弹起高度是前一次的一半
println(f"第$count次弹起高度:$height%.2f米")
}
println(s"\n经过 $count 次落地后,小球弹起高度低于0.5米")
println(f"第$count次弹起高度:$height%.4f米")
}
}
运用for循环和break
import scala.util.control.Breaks._
object Main {
def main(args: Array[String]): Unit = {
var height = 100.0
var count = 0
println("小球弹跳过程:")
breakable {
for (i <- 1 to 100) { // 设置一个足够大的上限
count = i
height = height / 2
if (height < 0.5) {
println(f"第$count次弹起高度:$height%.4f米 < 0.5米")
break
} else {
println(f"第$count次弹起高度:$height%.2f米")
}
}
}
println(s"\n答案:经过 $count 次落地后,小球弹起高度低于0.5米")
}
}
(一)for循环
标准格式是:
[for ( 循环变量 <- 数据集) {]()
// 循环体代码
}
说明:
1.如果循环变量的类型能被推断出来,是可以省略掉变量类型的。
2.这里的数据集可以是任意类型的数据集合,如字符串,集合,数组等等。
例如输出1~100间的偶数
object Main {
def main(args: Array[String]): Unit = {
// 输出1 ~ 100 中的偶数
for (i <- 1 to 100) {
if (i % 2 == 0) {
println(i)
}
}
}
}
(二)循环守卫
可以在循环中添加条件,如果条件成立就执行循环。这个叫循环守卫。
例如1~100中能同时被2、3、4整除的数
object Main {
def main(args: Array[String]): Unit = {
println("1~100中能同时被2、3、4整除的数:")
for (i <- 1 to 100) {
if (i % 2 == 0 && i % 3 == 0 && i % 4 == 0) {
println(i)
}
}
}
}
(三)循环步长
循环步长就是每次循环之后,循环变量的自增数值。
例如输出1~100中的奇数
object Main {
def main(args: Array[String]): Unit = {
println("1~100中的奇数(使用步长):")
// 从1开始,步长为2,直接遍历所有奇数
for(i <- 1 to 100 by 2) {
println(i)
}
}
}
(四)循环的返回值
for也可以获取到返回值,使用yield
例如
import scala.util.control.Breaks._(此代码无需手动打出,系统会自动补充)
object Main {
def main(args: Array[String]): Unit = {
/**
* break跳出整个for循环
* 格式:
* breakable {
* for(循环变量 <- 起点 to 终点) {
* break
* }
* }
*/
breakable {
for (i <- 1 to 100) {
// 如果遇到了第一个能整除9的数字就提前结束循环
if (i % 9 == 0) {
println(s"遇到第一个能被9整除的数:$i,循环结束")
// 结束循环
break
}
println(i)
}
}
println("循环后的代码继续执行")
}
}
判断是否为素数
import scala.util.control.Breaks._
object Main {
def main(args: Array[String]): Unit = {
val n = 97
// 假设它是素数
var isPrime = true
breakable {
for (i <- 2 to n-1) {
if (n % i == 0) { // 检查整除,结束循环
println(s"$i 能整除 $n")
isPrime = false
break
}
}
}
if (isPrime) {
println(s"$n 是素数")
} else {
println(s"$n 不是素数")
}
}
}
import scala.util.control.Breaks._
object Main {
def main(args: Array[String]): Unit = {
val n = 97
println(s"判断 $n 是否是素数:")
println(s"需要检查 2 到 ${math.sqrt(n).toInt} 之间的数")
var isPrime = true
var checkedCount = 0
breakable {
for (i <- 2 to math.sqrt(n).toInt) {
checkedCount += 1
if (n % i == 0) {
println(s"✓ 发现 $i 能整除 $n")
println(s"$n = $i × ${n/i}")
isPrime = false
break
} else {
println(s" $i 不能整除 $n")
}
}
}
println(s"共检查了 $checkedCount 个数")
if (isPrime) {
println(s"✓ $n 是素数")
} else {
println(s"✗ $n 不是素数")
}
}
}
(五)continue
在scala中是没有break和continue关键字的,如果一定要用,可以用scala.util.control包下的Breaks类的break
[import scala.util.control.Breaks._]()
object MainFor {
def main(args: Array[String]): Unit = {
for(i <- 1 to 10){
breakable {
if(i%3 == 0){
// continue
break
}
println(i)
}
}
}
}
将breakable写在for循环内部,就是continue!