scala内建控制-for循环

45 阅读2分钟

一、for循环

格式:

for (循环变量 <- 起点 to 终点;if(条件1);if(条件2);...if(条件3);){
    println(循环变量)
}

示例:

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

二、循环守卫

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

格式:

for(循环变量 <- 数据集 if condition1; if condition2 ...){]()  
  循环体  
}

示例:

// 打印1 - 10 内的偶数
for (i <- 1 to 10; if (i % 2 == 0)) {
  println(i)
}

三、循环步长

如何输出1 ~ 100 之间的奇数?

按1,3,5... 这个格式来输出,这就涉及到步长。

格式1:1 to 5 by 2

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

编码如下:

// 输出1~100中的奇数
for(i <- 99 to 1 by -2) {
  println(i)
}

四、判断素数

素数:只能被1和它本身整除的数。

eg: 2,3,5,7,11,13,17,19...97

思路:用 2 ~ (n-1) 依次去除这个数,如果能整除就说明不是素数。

例如:

n = 9

  1. 2 不能整除
  2. 3 能整除(不是素数)

n = 35

  1. 2 不能整除
  2. 3 不能整除
  3. 4 不能整除
  4. 5 能整除(不是素数)

代码如下:

val n = 97
// 假设它是素数
var isPrime = true
breakable {
  for (i <- 2 to n - 1) {
    if (n % i == 0) { // 能整除
      isPrime = false
      break
    }
    println(i)
  }
}

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

代码需要导入:(如何导入在上一篇文章中有教)

五、小球弹跳

弹跳小球:

  • 小球从 100 米高出自由落下,着地后有弹回高度的一半再次落下,如此重复。
  • 问:
  • 经过多少次落地后,小球弹起的高度才会低于 0.5 米?
  var h:Double  = 100
  var i = 0

  while(h>=0.5){
    i += 1
    h = h * 0.5
  }
  println(i, h)
}