栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Scala基础语法入门(五)Scala循环控制第一篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scala基础语法入门(五)Scala循环控制第一篇

‍♂️‍♂️ 写在前面

​​ 个人主页:csdn春和
 推荐专栏:更多专栏尽在主页!
 JavaWeb专栏(从入门到实战超详细!!!)
 SSM专栏 (更新中…)
​​ 本期文章:Scala基础语法入门(五)Scala循环控制第一篇
如果对您有帮助还请三连支持,定会一 一回访!‍♂️


本文目录
  • Scala中的For循环
    • 1、范围数据循环(to)
    • 2、范围for循环 (range)
    • 3、范围for循环 (until)
    • 4、循环步长
    • 5、循环守卫
    • 6、循环嵌套
    • 7、引入变量
    • 8、循环返回值
    • 9、倒序输出
    • 10、for循环练习

Scala中的For循环

 写在前面

Scala循环控制结构之For循环笔记 细节满满 干货十足!

1、范围数据循环(to)

我们先回顾java中的for循环

public static void main(String[] args) {

    // java中for循环

    ArrayList ints = new ArrayList();
    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 直到的意思 也是前闭后开

总结:范围for循环有三种写法

to 前后闭合

range 前闭后开

until 前闭后开

4、循环步长

所谓的循环步长就是怎样增加 或怎样减少 即变化的幅度大小

在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循环 九层妖塔
    

    for (i <- 1 to 9){
      println(" " * (9 - i)  + "*" * (i*2-1))
    }
  }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号