Scala基础学习-循环

一、流程控制

循环结构、选择结构、循环结构

1、循环结构

从上至下,从左至右,依次执行,系统默认结构

2.选择结构

分类:单分支、双分支、多分支
(1)、单分支

object xuexi {
  def main(args: Array[String]): Unit = {
    val a = 20
    if(a > 15) {
      println("成功")
    }
  }
}
结果: 成功

(2)、双分支
解释:通过判断条件进行分支执行

object xuexi {
  def main(args: Array[String]): Unit = {
    val a = 10
    if(a > 15) {
      println("成功")
    } else {
      println("不成功")
    }
  }
}
结果:不成功

(3)、多分支

object xuexi {
  def main(args: Array[String]): Unit = {
    val a = 9
    if(a > 15) {
      println("成功")
    } else if(a == 10){
      println("不成功")
    } else {
      println("可能成功")
    }
  }
}
结果:可能成功

(4)、注意事项
1.和java一样,在Scala中,如果大括号{}内逻辑之有一行,则大括号可以省略
案例:

val sex = "male"
if(sex = "male") 1 else 0

2.在Scala中,条件表达式也是有返回值的

val result = if(sex == "male") 1 else 0
result 的结果为 1

3.scala里面没有三元表达式

3.嵌套分支

解释:
有时候,我们会涉及到"组合判断",即一个分支结构中又嵌套了另一个分支结构,这个种写法就叫嵌套分支。

/**
 * 定义三个变量a,b,c 分别记录要进行操作的值
 * 定义一个变量max,用来记录获取到最大值
 * 先判断a是否大于或者等于b
 * 条件成立。说明a大于或等于b,接着比较a和c的值,获取最大值,并赋给max
 * 条件不成立,说明最大值是b,让b和c再比较大小,赋给max
 * 此时打印max是最大值
 */
object test {
  def main(args: Array[String]): Unit = {
    val a = 10
    val b = 20
    val c = 30
    var max = 0
    if (a > b) {
      max = if (a >= c) a else  c
    } else {
      max = if (b >= c) b else c
    }
    print(max)
  }
}
4.块表达式

解释:scala中,使用{} 表示一个块表达式
和if一样,块表达式也是有值的

val a = {
	println("1+1")
	1+1
}
结果: 1+1  //先打印
       2    //后执行打印下面的1 + 1
5.循环结构

分类: for循环 while循环 do.while循环
1.for循环
格式:

for(i <- 表达式/数组/集合){
  		// 逻辑代码
}

案例:
打印十次"Hello,Scala"

object test {
  def main(args: Array[String]): Unit = {
    val name = 1 to 10
    for (i <- name){
      println("Hollo,Scala" + i)
    }
  }
}
结果:
Hollo,Scala1
Hollo,Scala2
Hollo,Scala3
Hollo,Scala4
Hollo,Scala5
Hollo,Scala6
Hollo,Scala7
Hollo,Scala8
Hollo,Scala9
Hollo,Scala10

简化代码:

object test {
  def main(args: Array[String]): Unit = {
      for (i <- 1 to 10) println("Hollo,Scala" + i) //因为逻辑就一行,可以省略{},结果一样
  }
}

2.嵌套循环
解释:循环嵌套循环
案例:

object test {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 3) { //外循环控制列
      for (j <- 1 to 5) { //内循环控制行
        print("*")
      }
      println("*")
    }
  }
}
结果:
******
******
******

简化:

object test {
  def main(args: Array[String]): Unit = {

    for (i <- 1 to 3) {
      for (j <- 1 to 5) if (j == 5) println("*") else print("*")
    }
  }
}

简化2

object test {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 3; j <- 1 to 5) if (j == 5) println("*") else print("*")
    //scala独有的写法,可以将fot条件放在一个括号里,用;隔开
  }
}

3.守卫
解释:for表达式中,可以添加if判断语句,这个if判断就称之为守卫。
格式:

for(i <- 表达式/数组/集合 if 表达式){
	//逻辑代码
}

案例:

/**
 * 得到1到10被3整除的数
 */
object test {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 10 if i % 3 == 0)  println(i)
  }
}
结果:
3
6
9

4.for推导式
解释:Scala中的for循环也是有返回值的,在for循环体中,可以使用yield表达式构建出一个集合(可以简单理解为:就是一组数据),我们把使用yield的for表达式称为推导式

/**
 * 得到10,20,30,40 ... 100的集合
 */
object test {
  def main(args: Array[String]): Unit = {
    val nums = for(i <- 1 to 10) yield  i * 10
    println(nums)
  }
}
结果:Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

5.while 循环
解释:和java一样,条件是false循环结束,是true就继续执行循环体
格式:

while (判断条件){
	//循环体
	//控制条件
}

案例:

object test {
  def main(args: Array[String]): Unit = {
    var i = 1
    while (i <= 10) {
      println(i)
      i = i + 1
    }
  }
}
结果:
1
2
3
4
5
6
7
8
9
10

5.do.while 循环
格式:

do{
//循环体
//控制条件
} while(判断条件)

案例:

object test {
  def main(args: Array[String]): Unit = {
    var i = 1
    do {
      println(i)
      i = i + 1
    } while (i <= 10)
  }
}
结果:
1
2
3
4
5
6
7
8
9
10

6.实现break
解释:在for循环中,需要推出循环的地方,需要添加break()方法调用
用法:
1.导包

import scala.util.control.Breaks._

2.使用breakable将for表达式包起来
3.for表达式中需要退出循环的地方,添加break()方法
案例:
使用for表达式打印1-10的数据字,但是如果遇到数据5,则退出for表达式

object test {
  def main(args: Array[String]): Unit = {
    import scala.util.control.Breaks._
    breakable(
      for (i <- 1 to 10) {
        if (i == 5) break() else println(i)
      }
    )
  }
}
结果:
1
2
3
4

7.实现continue
和上面break类似,主要是主要看breakable在什么位置,主要功能式终止本次循环,执行下一次循环
案例:用for表达式打印1-10之间,所有不能整除3的数字

object test {
  def main(args: Array[String]): Unit = {
    import scala.util.control.Breaks._

      for (i <- 1 to 100) {
      breakable(
        if (i % 3 == 0) break() else println(i)}
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/607810.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle 数据库找到UDUMP的文件名称

oracle 数据库找到UDUMP的文件名称 select p.value||\||i.instance_name||_ora_||spid||.trc as "trace_file_name" from v$parameter p ,v$process pro, v$session s, (select sid from v$mystat where rownum1) m, v$instance i where lower(p.name)user_dump_…

Java_File

介绍&#xff1a; File对象表示路径&#xff0c;可以是文件&#xff0c;也可以是文件夹。这个路径可以是存在的&#xff0c;也可以是不存在的&#xff0c;带盘符的路径是绝对路径&#xff0c;不带盘符的路径是相对路径&#xff0c;相对路径默认到当前项目下去找 构造方法&…

英伟达推出视觉语言模型:VILA

NVIDIA和MIT的研究人员推出了一种新的视觉语言模型(VLM)预训练框架&#xff0c;名为VILA。这个框架旨在通过有效的嵌入对齐和动态神经网络架构&#xff0c;改进语言模型的视觉和文本的学习能力。VILA通过在大规模数据集如Coy0-700m上进行预训练&#xff0c;采用基于LLaVA模型的…

三.Django--ORM(操作数据库)

目录 1 什么是ORM 1.1 ORM优势 1.2ORM 劣势 1.3 ORM与数据库的关系 2 ORM 2.1 作用 2.2 连接数据库 2.3 表操作--设置字段 2.4 数据库的迁移 写路由增删改查操作 项目里的urls.py: app里的views.py: 注意点: 1 什么是ORM ORM中文---对象-关系映射 在MTV,MVC设计…

2024面试自动化测试面试题【含答案】

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

若依框架dialog弹窗取消点击空白出关闭

如果想全局取消的话就找到main.js在里面加上下面的一行代码&#xff0c;添加完成之后记得清楚浏览器缓存重新加载js文件。 Element.Dialog.props.closeOnClickModal.default false;如果想指定某个弹窗取消点击空白处关闭&#xff0c;那么就找到那个弹窗加上。添加完毕之后刷新…

扩散模型~

推荐&#xff1a;write_own_pipeline.ipynb - Colab (google.com) 基本管道 一直显示NVIDIA有问题&#xff0c;所以就把.to("cuda")去掉了&#xff0c;使用Colab运行的&#xff0c;代码如下&#xff1a; from diffusers import DDPMPipelineddpm DDPMPipeline.fr…

哈希题目总结

以下列举了可以用哈希方法&#xff08;包括但不限于用HashMap和HashSet&#xff09;的题目&#xff0c;实质上是把东西丢给这些数据结构去维护。请注意有些题目中用哈希是最优解&#xff0c;有些题目中不是最优解&#xff0c;可以自行探索其时间复杂度和空间复杂度的区别&#…

java入门1.1.1版本

前言&#xff1a; 上面的内容是1.0.0~1.1的内容总结 秉持着先做再定义的理念&#xff0c;这里会带着大家先体验一下类与对象 第一步&#xff1a;新建一个java文件 鼠标右键 → 新建 → 文本文档 → 右键 → 点击重名 → 全选 → hello.java 第二步&#xff1a;用笔记本打开 …

阿里云开发uniapp之uni-starter

一、为什么使用uni-starter uni-starter是集成商用项目常见功能的、云端一体应用快速开发项目模版。 一个应用有很多通用的功能&#xff0c;比如登录注册、个人中心、设置、权限管理、拦截器、banner... uni-starter将这些功能都已经集成好&#xff0c;另外&#xff0c;uni-s…

2023-2024年SaaS行业报告合集(精选22份)

SaaS行业报告/方案&#xff08;精选21份&#xff09; 2023-2024年 报告来源&#xff1a;2023-2024年SaaS行业报告合集&#xff08;精选22份&#xff09; 【以下是资料目录】 2024中国HCM SaaS领导者竞争力持续增强的行业龙头 2024年中国企业级SaaS行业研究报告 2024年SaaS…

基于Transformer网络的多步预测模型

包括完整流程数据代码处理&#xff1a; 多步预测数据集制作、数据加载、模型定义、参数设置、模型训练、模型测试、预测可视化、多步预测、模型评估 ● 环境框架&#xff1a;python 3.9 pytorch 1.8 及其以上版本均可运行 ● 使用对象&#xff1a;论文需求、毕业设计需求者…

Offer必备算法37_记忆化搜索_五道力扣题详解(由易到难)

目录 记忆化搜索概念和使用场景 ①力扣509. 斐波那契数 解析代码1_循环 解析代码2_暴搜递归 解析代码3_记忆化搜索 解析代码4_动态规划 ②力扣62. 不同路径 解析代码1_暴搜递归&#xff08;超时&#xff09; 解析代码2_记忆化搜索 解析代码3_动态规划 ③力扣300. 最…

最详尽的网络安全学习路线!涵盖所有技能点,带你成为网安专家!

目录 零基础小白&#xff0c;到就业&#xff01;入门到入土的网安学习路线&#xff01; 建议的学习顺序&#xff1a; 一、夯实一下基础&#xff0c;梳理和复习 二、HTML与JAVASCRIPT&#xff08;了解一下语法即可&#xff0c;要求不高&#xff09; 三、PHP入门 四、MYSQL…

QX-mini51单片机学习---(4)蜂鸣器

目录 1蜂鸣器工作原理 2三极管工作原理 3本节相关原理图分析 4实践 1蜂鸣器工作原理 2三极管工作原理 我们这里使用PNP三极管&#xff0c;低电压导通 做开关 PNP E&#xff08;emitrer&#xff09;&#xff1a;发射极&#xff0c;B&#xff08;base&#xff09;&#x…

leetcode每日一题第七十二天

class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {if(!root) return root;if(root->val val) return root;else if(root->val > val) return searchBST(root->left,val);else return searchBST(root->right,val);} };

WPF中页面加载时由于TreeView页面卡顿

示例&#xff1a;右侧界面的数据根据左侧TreeView的选项加载不同的数据&#xff0c;页面加载时会把所有的数据加载一遍&#xff0c;导致页面卡顿。 解决办法&#xff1a; <Setter Property"IsSelected" Value"{Binding IsSelected}"/>

初学python记录:力扣1652. 拆炸弹

题目&#xff1a; 你有一个炸弹需要拆除&#xff0c;时间紧迫&#xff01;你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码&#xff0c;你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 &#xff0c;将第 i 个数字用…

车载测试到底怎么样?真实揭秘!

什么是车载智能系统测试&#xff1f; 车载智能系统&#xff0c;是汽车智能化重要的组成部分&#xff0c;由旧有的车载资通讯系统结合联网汽车技术所演进而来&#xff0c;随着软硬件技术的不断进步&#xff0c; 让车载智能系统拥有强大的运算能力及多元化的应用功能。 车载智能…

FreeRTOS学习 -- 任务相关API函数

一、任务创建和删除API函数 FreeRTOS 最基本的功能就是任务管理&#xff0c;而任务管理最基本的操作就是创建和删除任务。 FreeRTOS的任务创建和删除API函数如下&#xff1a; 1、函数 xTaskCreate() 此函数用来创建一个任务&#xff0c;任务需要 RAM 来保存于任务有关的状…
最新文章