For循环控制
循环守卫
基本语法
for(i <- 1 to 3 if i != 2) {
print(i + " ")
}
println()
说明:
- 循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳过,类似于continue。
- 上面的代码等价
for (i <- 1 to 3){ if (i != 2) { print(i + " ") } }
案例实操
需求:输出 1 到 5 中,不等于 3 的值
object TestFor {
def main(args: Array[String]): Unit =
{ for (i <- 1 to 5 if i != 3) {
println(i + "张三丰")
}
}
}
//运行结果:
//1 张三丰
//2 张三丰
//4 张三丰
//5 张三丰
简单示例:
需求:使用循环守卫(guard)来打印1到10之间的所有偶数。
object Numbersexam {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10 if i % 2 == 0) {
println(i)
}
}
}
2
4
6
8
10
循环步长
基本语法
for (i <- 1 to 10 by 2) {
println("i=" + i)
}
i = 1
i = 3
i = 5
i = 7
i = 9
说明:by 表示步长
案例实操
需求:输出 1 到 10 以内的所有奇数
for (i <- 1 to 10 by 2) {
println("i=" + i)
}
i=1
i=3
i=5
i=7
i=9
循环返回值
基本语法
val res = for(i <- 1 to 10) yield i
println(res)
说明:将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。
注意:开发中很少使用。
案例实操
需求:将原数据中所有值乘以 2,并把数据返回到一个新的集合中。
object TestFor {
def main(args: Array[String]): Unit =
{ var res = for(i <-1 to 10) yield {
i * 2
}
println(res)
}
}
//输出结果:
Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
简单示例:
需求:创建一个包含1-10之间所有偶数的列表
object Yieldexam {
def main(args: Array[String]): Unit = {
val evenNumbers = for {
i <- 1 to 10 if i % 2 == 0
} yield i
println(evenNumbers)
}
}
//输出结果:
List(2, 4, 6, 8, 10)
倒序打印
说明:如果想倒序打印一组数据,可以用 reverse。
案例实操:
需求:倒序打印 10 到 1
for(i <- 1 to 10 reverse){
println(i)
}
10
9
8
7
6
5
4
3
2
1
另一个方法:(不用reverse,使用by,后面的数字前面加个负号,就倒着排序了)
object Reverseorder {
def main(args: Array[String]): Unit = {
for (i <- 10 to 1 by -1) {
println(i)
}
}
}
额外代码:鸡兔同笼
鸡和兔共35只,脚一共94,鸡和兔各多少
①
object CR {
def main(args: Array[String]): Unit = {
var count = 0
for (i <- 0 to 35) {
for (j <- 0 to 35) {
if (i + j == 35 && i * 2 + j * 4 == 94) {
count += 1
println(s"鸡有${i}只,兔有${j}只")
}
}
}
}
}
②
object CR {
def main(args: Array[String]): Unit = {
for{
chicken <- 0 to 35
rabbit <- 0 to 35
if chicken + rabbit == 35 && chicken * 2 + rabbit * 4 == 94{
println(s"鸡有$chicken只,兔有$rabbit只")
}
}
}
}
③
scala> for {
|a <- 0 to 35
|b = 35 - a
|if 2 * a + 4 * b == 94
|}
|println(s"鸡有$a只,兔有$a只")
④
// 全是常量
val heads = 35
val feet = 94
val rabbits = (feet - 2 * heads)/2
val chickens = heads - rabbits
println(s"鸡的数量:$chickens")
println(s"兔的数量:$rabbits")
结果:鸡有23只,兔有12只