当前位置: 首页 > news >正文

Scala(2)

For循环控制

循环守卫

        基本语法

for(i <- 1 to 3 if i != 2) { 
    print(i + " ")
}

println()

说明:

  1. 循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳过,类似于continue。
  2. 上面的代码等价 
    for (i <- 1 to 3){
        if (i != 2) {
            print(i + " ")
        }
    }

         案例实操

需求:输出 1 到 5 中,不等于 3 的值

object TestFor {
    def main(args: Array[String]): Unit = 
        { for (i <- 1 to 5 if i != 3) {
            println(i + "张三丰")
        }
    }
}

//运行结果:
//1 张三丰
//2 张三丰
//4 张三丰
//5 张三丰

         简单示例:

  需求:使用循环守卫(guard)来打印1到10之间的所有偶数

object Numbersexam {
    def main(args: Array[String]): Unit = {
        for (i <- 1 to 10 if i % 2 == 0) {
            println(i)
        }
    }
}

2
4
6
8
10

 循环步长

        基本语法

for (i <- 1 to 10 by 2) { 
    println("i=" + i)
}

i = 1
i = 3
i = 5
i = 7
i = 9

                说明:by 表示步长

       

         案例实操

需求:输出 1 到 10 以内的所有奇数

for (i <- 1 to 10 by 2) { 
    println("i=" + i)
}

i=1 
i=3 
i=5 
i=7
i=9

 循环返回值

        基本语法

val res = for(i <- 1 to 10) yield i
println(res)

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

注意:开发中很少使用。

        案例实操

需求:将原数据中所有值乘以 2,并把数据返回到一个新的集合中。

object TestFor {
    def main(args: Array[String]): Unit =
        { var res = for(i <-1 to 10) yield {
            i * 2
        }

        println(res)
    }
}

//输出结果:
Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

        简单示例:

需求:创建一个包含1-10之间所有偶数的列表

object Yieldexam {
    def main(args: Array[String]): Unit = {
        val evenNumbers = for {
            i <- 1 to 10 if i % 2 == 0
        } yield i

        println(evenNumbers)
    }
}

//输出结果:
 List(2, 4, 6, 8, 10)

 倒序打印

说明:如果想倒序打印一组数据,可以用 reverse

        案例实操:

 需求:倒序打印 10 到 1
for(i <- 1 to 10 reverse){ 
    println(i)
}

10
9
8
7
6
5
4
3
2
1
         另一个方法:(不用reverse,使用by,后面的数字前面加个负号,就倒着排序了)
object Reverseorder {
    def main(args: Array[String]): Unit = {
        for (i <- 10 to 1 by -1) {
            println(i)
        }    
    }
}

额外代码:鸡兔同笼

鸡和兔共35只,脚一共94,鸡和兔各多少

object CR {
    def main(args: Array[String]): Unit = {
        var count = 0
        for (i <- 0 to 35) {
            for (j <- 0 to 35) {
                if (i + j == 35 && i * 2 + j * 4 == 94) {
                    count += 1
                    println(s"鸡有${i}只,兔有${j}只")
                    }

                }
            }
    }
}

object CR {
    def main(args: Array[String]): Unit = {
        for{
            chicken <- 0 to 35
            rabbit <- 0 to 35
            if chicken + rabbit == 35 && chicken * 2 + rabbit * 4 == 94{
                println(s"鸡有$chicken只,兔有$rabbit只")
            }
        }
    }
}

scala> for {
     |a <- 0 to 35
     |b = 35 - a
     |if 2 * a + 4 * b == 94
     |}
     |println(s"鸡有$a只,兔有$a只")

 ④

// 全是常量
val heads = 35
val feet = 94
val rabbits = (feet - 2 * heads)/2
val chickens = heads - rabbits
println(s"鸡的数量:$chickens")
println(s"兔的数量:$rabbits") 

结果:鸡有23只,兔有12只

http://www.dtcms.com/a/102212.html

相关文章:

  • QT学习day1
  • 计算机视觉——传统数字图像处理中图像去噪原理与代码实现细节
  • 全长约8.3公里!宁波象山港跨海大桥南中塔柱云端合龙
  • 十五届蓝桥杯省赛Java B组(持续更新..)
  • 蓝桥杯专项复习——二分
  • 《Fundamentals of Electromigration-Aware IntegratedCircuit Design》笔记
  • HTML中数字和字母不换行显示
  • 【C++游戏引擎开发】《线性代数》(5):四元数的3D旋转原理与实现(含新增Vector3、修改Matrix为非SIMD版本)
  • 【区块链安全 | 第十九篇】类型之映射类型
  • 【Node.js入门笔记12---npm包】
  • 聊聊Spring AI的RetrievalAugmentationAdvisor
  • Unity TextMeshPro 实现文本逐字淡出效果
  • 5.02 WPF的 Combox、ListBox,slider、ProgressBar使用
  • C语言--插入排序
  • Kafka+Zookeeper从docker部署到spring boot使用完整教程
  • Vue:生命周期
  • 2025年山东水利水电 C 证考试精选题库
  • android adb 查看设备传感器
  • JS实现动态点图酷炫效果
  • git命令简陋版本
  • MySQL 复制与主从架构(Master-Slave)
  • Day48 | 657. 机器人能否返回原点、31. 下一个排列、463. 岛屿的周长、1356. 根据数字二进制下 1 的数目排序
  • 嵌入式系统简介
  • PH热榜 | 2025-03-31
  • MTU | 检测 / 设置 / 相关问题解析
  • 【JavaEE进阶】MyBatis(4)-完善图书管理系统
  • ros2--xacro
  • uniapp中如何用iconfont来管理图标集成到我们开发的项目中
  • 基于AT89C52单片机的轮胎压力监测系统
  • 学习threejs,使用THREE.ImageUtils.loadTexture加载纹理贴图