Scala流程控制For循环

For 循环控制

Scala 为 for 循环这一常见的控制结构提供了非常多的特性,这些 for 循环的特性被称为 for 推导式或 for 表达式。

目录

一、范围遍历

二、集合遍历

三、循环守卫

 四、循环步长

五、嵌套循环

六、引入变量

七、循环返回值

一、范围遍历

package chapter04

object Test02_Forloop {
  def main(args: Array[String]): Unit = {
    //带着编号输出10次hello word
    //java for语法:for(int i = 0 ;i < 10 ;i++){System.out.println(i+"hello word")}

    //1.范围遍历
    for(i <- 1 to 10){    //从一到十
      println(i+".hello word")
    }
    //本质是这样的,调用了1的.to()方法
    //但是对象的调用可以省略点 用空格代替  类型int也省略了
    // 1.to(10) 表示的是创建了这样一个类型(Range---集合类型)的对象 for循环遍历的就是这个对象里的元素
    for(i :Int <- 1.to(10)){
      println(i+".hello word")   //to 输出 1到10 包括1和10
    }

    println("===================")

    //不包含边际的遍历
    for (i<- Range(1,10)){
      println(i+".hello word")   //Range对象 输出 1到9 包括1和9
    }

    println("===================")

    for (i <- 1 until 10){
     println(i+".hello word")     //until  到十结束 不包含10  输出1到9
    }
  }
}

二、集合遍历

//2.集合遍历
// to 和 until 本质是创建了一个range  range本身又是一个集合类型
// 所以这里不创建range,使用其他集合  比如 Array  List  Set

for (i <- Array(12,34,45)){
  println(i)
}

for (i <- List(12,34,45)){
  println(i)
}

for (i <- Set(12,34,45)){
  println(i)
}

三、循环守卫

 循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳过,类似于continue。

//3.循环守卫
    for (i <- 1 to 10){
      if (i != 5){
        println(i)
      }
    }

    //等价于
    for (i <- 1 to 10 if i != 5){
      println(i)   // 1 2 3 4 6 7 8 9 10
    }
  }
}

 四、循环步长

//4.循环步长
for (i <- 1 to 10 by 2){   //(i <- (1 to 10).by(2) )  方法调用空格空开 ,参数只有一个省略括号
  println(i)
}

for(i <- 13 to 30 by 3){
  println(i)
}
// 13------->30 by -3  步长为负 不输出结果

println("-------------------")

//如果start值设置为比end小  步长可以为负

for(i <- 30 to 13 by -3){
  println(i)   //倒叙输出
}

//从十到一
for (i <- 10 to 1 by -1){
  println(i)
}

for (i <- 10 to 1  reverse ){ //reverse 反转   ----》原码里就是上面的意思
  println(i)
}

//步长为0 是会报异常的

//走半步:
//从十到一
for (i <- 1.0 to 10.0 by 0.5 ){    //把start和end变成double类型  步长就可以设置为小数
  println(i)
}

 

五、嵌套循环

//5.循环嵌套

//类似于java的写法
for(i <- 1 to 3){
  for (j <- 1 to 3){
    println("i= "+i +" , "+ "j="+j )
  }
}

//scala 提供了比较简洁的写法 用 ;分隔
println("----------------------")

for(i <- 1 to 4 ; j <- 1 to 5 ){
    println("i= "+i +" , "+ "j="+j )
}

 

六、引入变量

 for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑

for(i <- 1 to 3; j = 4 - i) {
 println("i=" + i + " j=" + j)
}

for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号, 当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号

//6.循环引入变量

for (i <- 1 to 10 ){
  val j = 10 -i
  println("i= "+i +" , "+ "j="+j )
}

println("-----------------")

for (i <- 1 to 10 ;j = 10 -i ){      //j不是从集合里取值的,而是直接定义出来的
  println("i= "+i +" , "+ "j="+j )
}

//写成多行 用花括号
for {
     i <- 1 to 10 
     j = 10 -i } 
{ 
  println("i= " + i + " , " + "j=" + j)

}

 七、循环返回值

scala里for循环的默认返回值是unit

val a :Unit = for (i <- 1 to 10){
      println(i)
    }
    println("a="+a)  //a=()
  }
}

将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。

//7.循环返回值
val a :Unit = for (i <- 1 to 10){
  println(i)
}
println("a="+a)  //a=()

//val ints: immutable.Seq[Int] = for (i <- 1 to 10) yield i //.var自动补全类型
//val b  = ints
val b = for (i <- 1 to 10) yield i
println("b="+b) //b=Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)   生成向量类,集合类型

//将原数据中所有值乘以 2,并把数据返回到一个新的集合中。
val c = for (i <- 1 to 10) yield i*2
println("c="+c)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值