Scala的for循环练习

90 阅读1分钟

Scala 的 for 循环(也称为 for 推导式)功能强大,支持多种迭代场景。以下是一些常见的练习案例,帮助你熟悉其用法:

1. 基础迭代:打印 1 到 10 的数字

// 打印1到10(左闭右开,需用until或to)
for (i <- 1 to 10) {
  print(i + " ")
}
// 输出:1 2 3 4 5 6 7 8 9 10 

// 用until(不包含结束值)
for (i <- 1 until 10) {
  print(i + " ")
}
// 输出:1 2 3 4 5 6 7 8 9 

2. 嵌套循环:打印九九乘法表

for (i <- 1 to 9; j <- 1 to i) {
  print(s"$j*$i=${i*j}\t")
  if (j == i) println() // 每行结束换行
}

输出:

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
...

3. 条件过滤(守卫):打印偶数

// 筛选1-20中的偶数
for (i <- 1 to 20 if i % 2 == 0) {
  print(i + " ")
}
// 输出:2 4 6 8 10 12 14 16 18 20 

4. 生成新集合(yield):转换元素

// 将1-5的数字翻倍,生成新集合
val doubled = for (i <- 1 to 5) yield i * 2
println(doubled) // 输出:Vector(2, 4, 6, 8, 10)
// 筛选并转换:字符串集合中取长度>3的元素,转为大写
val words = List("apple", "cat", "banana", "dog")
val longWords = for (word <- words if word.length > 3) yield word.toUpperCase
println(longWords) // 输出:List(APPLE, BANANA)

5. 迭代数组 / 列表:处理集合元素

val fruits = Array("apple", "banana", "cherry")
// 遍历数组并打印索引和元素
for (i <- fruits.indices) {
  println(s"索引 $i: ${fruits(i)}")
}
// 同时遍历索引和元素(zipWithIndex)
for ((fruit, index) <- fruits.zipWithIndex) {
  println(s"索引 $index: $fruit")
}

6. 多变量迭代:笛卡尔积

// 遍历两个范围的笛卡尔积
for (x <- 1 to 2; y <- List('a', 'b')) {
  println(s"($x, $y)")
}
// 输出:
// (1, a)
// (1, b)
// (2, a)
// (2, b)

7. 复杂逻辑:计算 1-100 的偶数和

var sum = 0
for (i <- 1 to 100 if i % 2 == 0) {
  sum += i
}
println(s"1-100偶数和:$sum") // 输出:2550

练习总结

  • to 生成包含首尾的范围,until 生成不包含尾的范围。
  • 用 if 作为守卫条件筛选元素。
  • yield 可将循环结果收集为新集合(类型与原集合一致)。
  • 支持多变量、嵌套循环和集合操作,语法简洁灵活。

可以尝试修改上述例子,比如实现素数筛选、字符串反转集合等,加深理解。