🙆♂️🙆♂️ 写在前面
🏠 个人主页:csdn春和
📚 推荐专栏:更多专栏尽在主页!
JavaWeb专栏(从入门到实战超详细!!!)
SSM专栏 (更新中…)
📖 本期文章:Scala基础语法入门(五)Scala循环控制第一篇
如果对您有帮助还请三连支持,定会一 一回访!🙋🏻♂️
📌本文目录
- Scala中的For循环
- 1、范围数据循环(to)
- 2、范围for循环 (range)
- 3、范围for循环 (until)
- 4、循环步长
- 5、循环守卫
- 6、循环嵌套
- 7、引入变量
- 8、循环返回值
- 9、倒序输出
- 10、for循环练习
📝 写在前面
1、范围数据循环(to)Scala循环控制结构之For循环笔记 细节满满 干货十足!
我们先回顾java中的for循环
public static void main(String[] args) {
// java中for循环
ArrayList<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);
ints.add(3);
ints.add(4);
// 普通for循环
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
System.out.println("-----------------------------------------");
// 增强for循环 jdk1.5
for (Integer i : ints) {
System.out.println(i);
}
}
我们知道增强for循环是jdk1.5版本之后出现的 是从pizza语言引进来的,而Scala的创始人马丁开发了两门语言
一个是pizza 一个就是Scala,而马丁觉得循环遍历 集合里面的元素更重要 所以将元素放在了前面,就跟变量声明一样
按照上面我们基本可以知道Scala中for循环的写法了;
i 表示循环的变量,<- 规定 to 前后闭合
那么为什么用to呢?
在Scala中国一切都是对象 1 to 5 省略了一个 . 即表明to是一个方法
那么我们可以使用一个变量来接收
val range = 1.to(5)
for (i:Int <- range){
println(i)
}
而在Scala中 .
可以省略
// val range = 1.to(5)
val range = 1 to (5)
for (i: Int <- range) {
println(i)
}
参数只有一个或者没有参数 () 可以省略不写
// val range = 1.to(5)
// val range = 1 to (5)
val range = 1 to 5
for (i: Int <- range) {
println(i)
}
所以 1 to 5 就是这样来的
又因为Scala中如果可以推断出数据类型 那么数据类型也可以不写
// val range = 1.to(5)
// val range = 1 to (5)
val range = 1 to 5
// for (i: Int <- range) {
// println(i)
// }
for (i <- range) {
println(i)
}
所以最终的写法 最简洁的写法是这样的:
for (i <- 1 to 5){
println(i)
}
运行结果:
所以总结出Scala中for循环的基础语法:
for(循环遍历 <- 数据集){
循环体 代码块
}
这里的数据集可以是任意类型的数据集合,如字符串,集合,数组等
2、范围for循环 (range)
for (i <- Range(1,5)){
println(i + " 雨纷纷旧故里草木深!")
}
我们发现只打印了四句话
range 是前闭后开的
3、范围for循环 (until)
// for循环 until
for (i <- 1 until(5)){
println(i + " 我听闻你是始终一个人!")
}
until 直到的意思 也是前闭后开
4、循环步长总结:范围for循环有三种写法
to 前后闭合
range 前闭后开
until 前闭后开
所谓的循环步长就是怎样增加 或怎样减少 即变化的幅度大小
在java中的循环步长:
// 循环步长
for (int i = 0; i < 10; i+=2) {
System.out.println(i);
}
scala的集合也可以设定循环的增长幅度,也就是所谓的步长step 使用by 指定循环步长
// for循环 循环步长
for (i <- 1 to 10 by 2) {
println(i)
}
println("---------------------------------------")
for (i <- 1 until (10) by 2) {
println(i)
}
println("---------------------------------------")
for (i <- Range(1,10,2)){
println(i)
}
其中Range比较特殊,我们可以点击查看源码
5、循环守卫循环时可以增加条件来决定是否继续循环体的执行,
这里的判断条件我们称之为循环守卫
// for循环 循环守卫
for (i <- 1 to 5 if i != 3) { // 在1 ~ 5的范围内 i不等于三 才循环 所以输出 1 2 4 5
println(i)
}
思考一个问题,上述代码和下面的代码有什么区别?
for (i <- 1 to 5){
if (i != 3){
println(i)
}
}
首先可以肯定 两段代码都会输出 1,2,4,5
那么究竟有什么区别,我们来看看:
首先我们在两端代码中for循环体里添加一句输出语句
观察打印情况:
6、循环嵌套得出结论:
使用循环守卫比较节省资源,使用下面的代码更消耗资源
嵌套循环是什么 ,简而言之就是循环里面再循环
// for循环 循环嵌套
// 写法一
for ( i <- Range(1,3); j <- Range(1,3) ) {
println("i = " + i + ",j = " + j )
}
println("***************************************************")
// 写法二
for ( i <- Range(1,3) ) {
for ( j <- Range(1,3) ) {
println("i = " + i + ",j = " + j )
}
}
体会两种写法的区别:
写法一只有当外循环和内循环的范围一样的时候可以简写成循环一,当内循环范围为0,这种写法不能够做其他 *** 作,即不满足循环条件 进不了循环
都建议写成写法二的格式
def main(args: Array[String]): Unit = {
// for循环 循环嵌套
// 写法一
for ( i <- Range(1,3); j <- Range(1,1) ) {
println("i = " + i + ",j = " + j )
}
println("***************************************************")
// 写法二
for ( i <- Range(1,3) ) {
println("我停止了收讯号")
for ( j <- Range(1,1) ) {
println("i = " + i + ",j = " + j )
}
}
}
7、引入变量
变量的值跟循环的变量有关系 有关系这个变量就能拿过来用
// for循环 引入变量
for (i <- 1 to 5; j = i + 1){
println(s"i = ${i} ; j = ${j}")
}
8、循环返回值
scala中所有表达式都是有返回值的。但是这里的返回值并不一定都有值 可能是Unit,如果希望for循环表达式的返回值就具体的值,就需要使用关键字yield
val res = for (i <- 1 to 5) yield{
i
}
println(res)
val res = for (i <- 1 to 5) yield{
i * 3
}
println(res)
Java中的线程有yield方法,Scala中该如何调用?
在Scala中yield为关键字
可以使用``包裹
9、倒序输出在Scala中如果想倒序打印一组数据,可以用 reverse
需求:倒序打印出1~10
// TODO 倒序打印 1~10
for (i <- 1 to 10 reverse){
println(i)
}
10、for循环练习
需求:只用一层循环打印出九层妖塔
object Scala02_ForLoop08 {
def main(args: Array[String]): Unit = {
// for循环 九层妖塔
/*
* 1
*** 3
***** 5
******* 7
********* 9
*********** 11
************* 13
*************** 15
***************** 17
* */
for (i <- 1 to 9){
println(" " * (9 - i) + "*" * (i*2-1))
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)