for循环

58 阅读2分钟

for循环

在scala代码中,有一种循环方式叫做for循环,当我们需要计算某一项东西的时候,我们可以选择敲击以下代码:

object base21 {
  def main(args: Array[String]): Unit = {
    //输出 1 ~ 100
       for (i <- 1 to 100) {
          println(i)
    }
  }
}

运行结果如图所示:

image.png

当我换一种方式时,假如我要在1~100找出素数,可以敲击以下代码:

object base22 {
  def main(args: Array[String]): Unit = {
    //输出 1 ~ 100 中的能整除234的数字
    for (i <- 1 to 100; if(i%2 == 0); if(i%3 == 0); if(i%4 == 0)) {
          println(i)
    }
  }
}

运行结果如图所示:

image.png

当我需要找出1~100中的奇数或者偶数时,可以选择敲击以下代码:

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

运行结果如图所示:

image.png

可以看到我求奇数,奇数是从大到小进行排序的

当我们想要判断某一个数字是不是素数时,这个代码的原理和判断闰年的原理差不多,必要时我们可以敲击以下代码:



object base24 {
  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}不是素数")
    }
  }
}

运行结果如图所示:

image.png 你可以给这个n随意赋值,在这代码里,都可以给你判断出这个赋值的n是否为素数。

如果在以上代码加入一个优化不是素数的情况,如果有的话可以提前结束循环:

可以敲击以下代码:



object base25 {
  def main(args: Array[String]): Unit = {
    /**...*/

      // breakable + break: 优化不是素数的情况:提前结束循环
      // Math.sqrt(n) : 减少搜索的范围
    import scala.util.control.Breaks._

    val n = 97
    // 假如它是素数
    var isPrime = true
    breakable{
    for (i <- 2 to Math.sqrt(n).toInt) {
      if (n % i == 0){ // 能整除,结束循环
        println(s"${i}能整除")
        isPrime = false
        break
      }
      println(i)
     }
    }

    if(isPrime){
      println(s"{n}是素数")
    } else {
      println(s"{n}不是素数")
    }
  }

加入了这些优化不是素数的因素,运行结果如图所示:

image.png