|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
分类:
bdv015-scala
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通