建控制-循环语句for循环

32 阅读1分钟

for循环

格式

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

说明:

1.如果循环变量的类型能被推断出来,是可以省略掉变量类型的。 2.这里的数据集可以是任意类型的数据集合,如字符串,集合,数组等等。

编码示例1: 输出 1 - 10

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

编码示例 输出指定字符串数组

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

问题:求s = 1 - 1/2 + 1/3 - 1/4 + 1/5 ... + 1/19的值

var sum1 = 0.0
for (i <- 1 to 19) {
  // 奇数项为正,偶数项为负
  if (i % 2 == 1) {
    sum1 += 1.0 / i
  } else {
    sum1 -= 1.0 / i
  }
}
println(s"1 - 1/2 + 1/3 - ... + 1/19 = $sum1")

循环守卫

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

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)

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

循环的返回值

之前学习过if的返回值,大家还记得吗? 怎么用的?

for也可以获取到返回值,使用yield

[val ret = for(i <- 1 to 3) yield { i*2 }]()  
println(ret)  
println(ret(1))

continue

在scala中是没有break和continue关键字的,如果一定要用,可以用scala.util.control包下的Breaks类的break()

[import scala.util.control.Breaks._]()  
object MainFor {  
  def main(args: Array[String]): Unit = {  
     for(i <- 1 to 10){  
       breakable {  
         if(i%3 == 0){  
           //         continue  
           break  
         }  
         println(i)  
       }  
     }  
  }  
}