|NO.Z.00015|——————————|BigDataEnd|——|Hadoop&Scala.V02|——|Scala.v02|Scala函数|for表达式|

一、for 表达式
### --- for表达式

~~~     Scala中,for循环语法结构:for (i <- 表达式 / 集合),让变量 i遍历<-右边的表达式/集合的所有值。
~~~     Scala为for循环提供了很多的特性,这些特性被称之为 for守卫式 或 for推导式。
### --- 编程示例

~~~     # 基本结构。使用to实现左右两边闭合的访问区间
for (i <- 1 to 10) {
    println(s"i = $i")
}
~~~     # 基本结构。使用until实现左闭右开的访问区间

for (i <- 1 until 10) {
    println(s"i = $i")
}
~~~     # 双重循环。条件之间使用分号分隔

for (i <- 1 until 5; j <- 2 until 5){
    println(i * j )
}
~~~     # 使用变量

for (i <- 1 to 3 ;j = 4-i){
    println(i * j )
}
~~~     # 守卫语句。增加 if 条件语句

for (i <- 1 to 10; j <- 1 to 10 if i==j){
    println(s"i * j = $i * $j = ${i * j}")
}
~~~     # 使用 yield 接收返回的结果,这种形式被称为for推导式

val result = for (i <- 1 to 10) yield i
~~~     # 使用大括号将生成器、守卫、定义包含在其中;并以换行的方式来隔开它们

for { i <- 1 to 3
     from = 4 - i
     j <- from to 3 }
     println(s"i = $i; j = $j")
### --- 编程代码

package yanqi.cn.part02

/**
 * Scala拥有与Java相同的While和do While循环
 * 但是没有与Java for循环相对应的语法结构
 * Scala中的for:for(i <- 表达式或集合),让循环变量i遍历<-右达表达式或集合的所有值
 * 注意:循环变量i前面没有用val 或 var来修饰,这个循环变量的类型是表达式或集合的元素类型
 * 循环变量的作用域一直持续到循环结束
 */
object ForDemo {
  def main(args: Array[String]): Unit = {
    //for基本结构,使用to实现左右两边闭合的访问区间[1,10]
    for (i <- 1 to 10) {
      println(s"i = $i")
    }
    //for基本结构,使用until实现左闭右开的访问区间[1,10)
    for (i <- 1 until (10)) {
      println(s"i = $i")
    }
    //双重循环,相当于Java中的嵌套循环,条件之间用分号分隔
    println("=============双重循环=================")
    for (i <- 1 to 3; j <- 1 to 5) {
      println(i * j)
    }
    println("=============循环中使用变量=================")
    for (i <- 1 to 3; j = 4 - i) {
      println(i * j)
    }
    println("=============守卫式,增加了if条件语句=================")
    //注意:if前面没有分号
    for (i <- 1 to 10; j <- 1 to 10 if i == j) {
      println(s"i * j = $i * $j =${i * j}")
    }
    println("=============推导式,使用yield接收返回结果=================")
    //如果for循环的循环体以yield开始,那么此循环会构造出一个集合,每次迭代生成集合中的一个值。
    //可以使用变量接收产生的新集合
    val result = for (i <- 1 to 5) yield i % 2
    result.foreach(println(_))

    println("=============九九乘法表=================")
    for (i <- 1 to 9; j <- 1 to i) {
      print(s"$j * $i = ${i * j}\t")
      if (i == j) println()
    }
    println("=============for循环中使用大括号=================")
    for {
      i <- 1 to 3
      from = 4 - i
      j <- from to 3
    }
      println(s"i=$i,j=$j")

    println("=============遍历字符串=================")
    val message="sparkscala"
    for(elem <- message) print(elem+" ")
  }
}
### --- 编译打印

D:\JAVA\jdk1.8.0_231\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=52661:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\JAVA\jdk1.8.0_231\jre\lib\charsets.jar;D:\JAVA\jdk1.8.0_231\jre\lib\deploy.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\dnsns.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jaccess.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\localedata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\nashorn.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunec.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\zipfs.jar;D:\JAVA\jdk1.8.0_231\jre\lib\javaws.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jce.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfr.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfxswt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jsse.jar;D:\JAVA\jdk1.8.0_231\jre\lib\management-agent.jar;D:\JAVA\jdk1.8.0_231\jre\lib\plugin.jar;D:\JAVA\jdk1.8.0_231\jre\lib\resources.jar;D:\JAVA\jdk1.8.0_231\jre\lib\rt.jar;E:\NO.Z.10000——javaproject\NO.Z.00002.Hadoop\ScalaPro\out\production\ScalaPro;D:\JAVA\scala-2.12.2\lib\scala-library.jar;D:\JAVA\scala-2.12.2\lib\scala-reflect.jar yanqi.cn.part02.ForDemo
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
=============双重循环=================
1
2
3
4
5
2
4
6
8
10
3
6
9
12
15
=============循环中使用变量=================
3
4
3
=============守卫式,增加了if条件语句=================
i * j = 1 * 1 =1
i * j = 2 * 2 =4
i * j = 3 * 3 =9
i * j = 4 * 4 =16
i * j = 5 * 5 =25
i * j = 6 * 6 =36
i * j = 7 * 7 =49
i * j = 8 * 8 =64
i * j = 9 * 9 =81
i * j = 10 * 10 =100
=============推导式,使用yield接收返回结果=================
1
0
1
0
1
=============九九乘法表=================
1 * 1 = 1   
1 * 2 = 2   2 * 2 = 4   
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9   
1 * 4 = 4   2 * 4 = 8   3 * 4 = 12  4 * 4 = 16  
1 * 5 = 5   2 * 5 = 10  3 * 5 = 15  4 * 5 = 20  5 * 5 = 25  
1 * 6 = 6   2 * 6 = 12  3 * 6 = 18  4 * 6 = 24  5 * 6 = 30  6 * 6 = 36  
1 * 7 = 7   2 * 7 = 14  3 * 7 = 21  4 * 7 = 28  5 * 7 = 35  6 * 7 = 42  7 * 7 = 49  
1 * 8 = 8   2 * 8 = 16  3 * 8 = 24  4 * 8 = 32  5 * 8 = 40  6 * 8 = 48  7 * 8 = 56  8 * 8 = 64  
1 * 9 = 9   2 * 9 = 18  3 * 9 = 27  4 * 9 = 36  5 * 9 = 45  6 * 9 = 54  7 * 9 = 63  8 * 9 = 72  9 * 9 = 81  
=============for循环中使用大括号=================
i=1,j=3
i=2,j=2
i=2,j=3
i=3,j=1
i=3,j=2
i=3,j=3
=============遍历字符串=================
s p a r k s c a l a 
Process finished with exit code 0

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(21)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示