for循环
语法格式:
for( var x <- Range ){
statement(s);
}
说明:Range可以是一个数字区间:i to j [i , j](包含首尾),或者i until j [i , j)(包头不包尾)
object ForDemo {
def main(args: Array[String]): Unit = {
val start = 1
val end = 10
for(x <- start to end) {
println("靓仔,你好:" + x)
}
}
}
object AnotherForDemo {
def main(args: Array[String]): Unit = {
val start = 1
val end = 10
for(x <- start until end) {
println("until 靓仔,你好:" + x)
}
}
}
条件(过滤)循环:
for( var x <- Range if x > 3){
statement(s);
}
/**
* @author fengchengliang@126.com
* @date 2019/8/24
*/
object IfForDemo {
def main(args: Array[String]): Unit = {
val start = 1
val end = 10
for (x <- start to end if x > 5) {
println(s"条件(过滤)循环::x = ${x}")
}
}
}
引入变量:
/**
* @author fengchengliang@126.com
* @date 2019/8/24
* 等价于for循环嵌套
*/
object MultipleForDemo {
def main(args: Array[String]): Unit = {
var idx = 0
for(i <- 1 to 3; j <- 2 to 4) {
idx += 1
println(s"${idx} -> i = ${i}, j = ${j}")
}
}
}
查看反编译源码即可知道,这是一个嵌套for循环
for循环小括号()替换成花括号{}
/**
* @author fengchengliang@126.com
* @date 2019/8/24
*/
object ForDemo2 {
def main(args: Array[String]): Unit = {
for(x <- 1 to 2 ; y <- 2 to 3) {
println(s"小括号() for 循环:${x},${y}")
}
println("------------这是一条忧伤的分割线----------------")
for{
x <- 1 to 2
y <- 2 to 3
} {
println(s"花括号{} for 循环:${x},${y}")
}
}
}
对于for循环,小括号()、花括号{}都是可以的
不成文约定:
- 小括号(),有一个条件的时候使用
- 花括号{}, 有多个条件的时候使用,换行可以省略分号;
不过不按约定写也是可以的,如图:
for步长控制:
语法格式:
for( var x <- Range ){
statement(s);
}
或者
for( var x <- begin to end if x % 2 == 0){
statement(s);
}
/**
* @author fengchengliang@126.com
* @date 2019/8/24
*/
object ForRangeStepDemo {
def main(args: Array[String]): Unit = {
for (x <- Range(1, 10, 2)) {
println(s"x = ${x}")
}
println("================================")
for (x <- 1 to 10 if x % 2 == 1) {
println(s"x = ${x}")
}
}
}
for的yield用法:
yield 英文单词的意思:
v. | 出产(作物); 产生(收益、效益等); 提供; 屈服; 让步; 放弃; 缴出; |
n. | 产量; 产出; 利润; |
语法格式:
var retVal = for{ var x <- List
if condition1; if condition2...
}yield x
案例:
/**
* @author fengchengliang@126.com
* @date 2019/8/24
*/
object YieldDemo {
def main(args: Array[String]): Unit = {
val destination: List[String] = List("昆明", "大理", "丽江", "香格里拉", "泸沽湖")
val retVal = for (x <- destination) yield {
s"我要去[${x}]旅游;)"
}
println(retVal)
}
}