scala中的for循环

79 阅读2分钟

1.for循环

格式:

for ( 循环变量 <- 数据集) {]()  
  // 循环体代码  
}

说明:

1.如果循环变量的类型能被推断出来,是可以省略掉变量类型的。

2.这里的数据集可以是任意类型的数据集合,如字符串,集合,数组等等。

var array2 = 1 until 5 // 1,2,3,4  
for (i <- array){  
  println(i)  
}

代码说明:

1.1 until 5 等价于 Range(1,5)

val fruits = List("apple","banana","origane","strawberry")]()  
for(fruit <- fruits){  
  println("fruit is " + fruit)  
}

以下代码,为取值1~100,

object fxh {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 100){
      println(i)
    }
  }

}

运行结果如下:

Snipaste_2025-09-29_14-47-42.png

2.循环守卫

可以在循环中添加条件,如果条件成立就执行循环。这个叫循环守卫。

格式:

for(循环变量 <- 数据集 if condition1; if condition2 ...){]()  
  循环体  
}
object swxh {
  def main(args: Array[String]): Unit = {
    /*
 循环守卫
 当后面的条件都满足的时候,才去执行循环体的内容
 格式:
*( 循环变量 <- 起点 to 终点; if(条件1); if(条件2);...if(条件n); ) {
 println(循环变量)
 }
*/
    // 输出1 ~ 100 中的能整除2,3,4的数字
    for(i <- 1 to 100; if(i%2 == 0); if(i%3 == 0); if(i%4 == 0)){
      println(i)
    }
  }
}

3.

格式

for(i <- 1 to 100 by 2 ){  
println(i)  
}

例子如下:

object xhbc {
  def main(args: Array[String]): Unit = {
    // 输出1 ~ 100 中的奇数
    // var i = 1
    // while(i <= 100){
    // println(i)
    // i += 2
    // }
    for(i <- 1 to 100 by 20){
      println(i)
    }
  }
}

运行结果:

Snipaste_2025-09-29_15-01-18.png

格式1:1 to 5 by 2

格式2:Range(1,5,2)

循环步长:每次循环过后,循环变量的自增数值。

4.for循环中的break

代码如下:

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

object xt {
  def main(args: Array[String]): Unit = {
    // break跳出整个for循环
    // 格式:
    // breakable {
    // for( 循环变量 <- 起点 to 终点 ) {
    // break
    // }
    // }
      //
      breakable {
        for (i <- 1 to 100) {
          // 如果遇到了第一个能整除9的数字就提前结束循环
          if (i % 9 == 0) {
            // 结束循环
            break
          }
          println(i)
        }
      }
  }
}

Snipaste_2025-09-29_15-12-54.png

例题:问一个数是否为素数?

object sl929 {
  def main(args: Array[String]): Unit = {
    val n = 97
    // 假设它是素数
    var isPrime = true
    for(i <- 2 to n-1) {
      if(n % i == 0) { // 能整除
        isPrime = false
      }
    }
    if(isPrime) {
      println(s"n是素数") }
      else { println(s"n不是素数")
    }
  }
}

运行效果如图所示:

Snipaste_2025-09-29_15-36-41.png

下图为改进过后的例子,较上图而言,更加具体全面。

Snipaste_2025-09-29_15-52-31.png

**例题:**小球从 100 米高处自由落下,着地后又弹回高度的一半再次落下,如此重复。问经过多少次落地后,小球弹起的高度才会低于 0.5 米?

代码如图所示:

Snipaste_2025-09-29_16-02-22.png