1.顺序控制

顺序控制介绍

程序从上到下逐行地执行,中间没有任何判断和跳转。

顺序控制举例和注意事项

Scala中定义变量时采用合法的前向引用。如:
def main(args : Array[String]) : Unit = {
var num1 = 12
var num2 = num1 + 2
}
错误形式:
def main(args : Array[String]) : Unit = {
var num2 = num1 + 2
var num1 = 12
}

2 分支控制if-else

单分支

基本语法

if (条件表达式) {

执行代码块

}

说明:当条件表达式为ture 时,就会执行 { } 的代码。

单分支对应的流程图

双分支

基本语法

if (条件表达式) {

执行代码块1

} else {

执行代码块2

}

说明:当条件表达式成立,即执行代码块1,否则执行代码块2.

双分支对应的流程图

多分支

基本语法

if (条件表达式1) {

执行代码块1

} else if (条件表达式2) {

执行代码块2

} …… else {

执行代码块n

}

多分支的流程图

分支控制if-else 注意事项

1)如果大括号{}内的逻辑代码只有一行,大括号可以省略, 这点和java 的规定一样。

2)Scala中任意表达式都是有返回值的,也就意味着if else表达式其实是有返回结果的,具体返回结果的值取决于满足条件的代码体的最后一行内容.

3)Scala中是没有三元运算符

嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。嵌套分支不要超过3层

基本语法 if(){

if(){

}else{

}

}

3 for循环控制

Scala 也为for 循环这一常见的控制结构提供了非常多的特性,这些for 循环的特性被称为for 推导式(for comprehension)或for 表达式(for expression)

范围数据循环方式1

for(i <- 1 to 3){

print(i + " ")

} println()

说明

i 表示循环的变量, <- 规定好 to 规定

i 将会从 1-3 循环, 前后闭合 输出10句 "hello,尚硅谷!"

范围数据循环方式2

基本案例

for(i <- 1 until 3) {

print(i + " ")

} println()

说明:

1)这种方式和前面的区别在于 i 是从1 到 3-1

2)前闭合后开的范围,和java的arr.length() 类似

for (int i = 0; i < arr.lenght; i++){}

输出10句 "hello,尚硅谷!"

循环守卫

基本案例

for(i <- 1 to 3 if i != 2) {

print(i + " ")

}

println()

基本案例说明

循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue

上面的代码等价

for (i <- 1 to 3) {

if (i != 2) {

println(i+"")

}

}

嵌套循环 

基本案例

for(i <- 1 to 3; j <- 1 to 3) {

println(" i =" + i + " j = " + j)

}

没有关键字,所以范围后一定要加;来隔断逻辑

上面的代码等价

for ( i <- 1 to 3) {

for ( j <- 1to 3){

println(i + " " + j + " ")

}

}

循环返回值 

基本案例

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

println(res)

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

使用花括号{}代替小括号()

基本案例

for(i <- 1 to 3; j = i * 2) {

println(" i= " + i + " j= " + j)

}

可以写成

for{

i <- 1 to 3

j = i * 2

} {

println(" i= " + i + " j= " + j)

}

1){}和()对于for表达式来说都可以

2)for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号

3)当使用{} 来换行写表达式时,分号就不用写了

注意事项和细节说明

scala 的for循环形式和java是较大差异,这点请同学们注意,但是基本的原理还是一样的。

scala 的for循环的步长如何控制! [for(i <- Range(1,3,2)]

while循环控制

基本语法

循环变量初始化

while (循环条件) {

循环体(语句)

循环变量迭代

}

注意事项和细节说明

1)循环条件是返回一个布尔值的表达式

2)while循环是先判断再执行语句

3)与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的()

4)因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在while循环的外部,

那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用for循环。

do..while循环控制

基本语法

循环变量初始化;

do{

循环体(语句)

循环变量迭代

} while(循环条件)

注意事项和细节说明

1)循环条件是返回一个布尔值的表达式

2)do..while循环是先执行,再判断

3)和while 一样,因为do…while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,

而变量需要声明在do...while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用for循环  

while循环的中断 

Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数式的风格解决break和contine的功能,而不是一个关键字。

如何实现continue的效果 Scala内置控制结构特地也去掉了continue,是为了更好的适应函数化编程,可以使用if – else 或是 循环守卫实现continue的效果

for (i <- 1 to 10 if (i != 2 && i != 3)) {

println("i=" + i)

}

Scala 基础(八):Scala 程序流程控制的更多相关文章

  1. 4. Scala程序流程控制

    4.1 程序流程控制说明 在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句,顺序控制,粉质控制,循环控制 温馨提示:Scala语言中控制结构和Java语言中的 ...

  2. [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套

    一.运算符 算数运算符 +,-,*,/,%,++,-- 1.+,-,*,/ 整数除以整数的结果为舍弃了小数部分的整数. 2.%:取余 %左右都为正数,左边小于右边结果为左边值,如,4%5=4 %左边大 ...

  3. Java 基础 程序流程控制 (下)

    Java 程序流程控制 (下) 此篇单独对循环结构的知识点进行整理: 之前讲到循环结构分为:for循环,while循环,do...while循环三种最基本的循环结构:在JDK1.5以后的版本还提供了f ...

  4. Java基础-程序流程控制第二弹(循环结构)

    Java基础-程序流程控制第二弹(循环结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制有三种基本结构:顺序结构,选择结构和循环结构.一个脚本就是顺序结构执行的,选择结 ...

  5. Java基础-程序流程控制第一弹(分支结构/选择结构)

    Java基础-程序流程控制第一弹(分支结构/选择结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.if语句 1>.if语句的第一种格式 if(条件表达式){ 语句体: ...

  6. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  7. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  8. Java 基础 程序流程控制 (上)

    Java程序流程控制 (上) Java程序大体分为三种流程控制结构:顺序结构.分支结构.循环结构 顺序结构 程序由上到下的逐行执行,中间没有任何跳转和判断语句. 示例代码如下: public clas ...

  9. Java基础之程序流程控制

    Java中的程序流程控制 Java中的程序流程分为三种结构:①顺序结构:②分支结构:③循环结构 一.顺序结构 Java中定义成员变量的时候,采用的是前向引用,也就是后面的变量可以引用之前定义好的变量. ...

  10. Java 基础入门随笔(4) JavaSE版——程序流程控制

    上一节对于运算符有了大致的了解,这一节针对程序流程控制进行复习!程序流程控制包括顺序结构.判断结构(if).选择结构(switch).循环结构. 1.判断结构 ①if语句的第一种格式:        ...

随机推荐

  1. SSM框架整合以及书籍管理CRUD系统

    1.基本环境搭建 1.新建一Maven项目!ssmbuild , 添加web的支持 2.导入相关的pom依赖! <?xml version="1.0" encoding=&q ...

  2. is ==小数据池编码解码

    ==      比较      比较的是两边的值    is      比较      比较的是内存地址   判断两个东西指向的是不是同一个对象         取内存地址 id() 小数据池     ...

  3. [BZOJ]最长道路

    题目   点这里看题目.    BZOJ 上是权限题目. 分析   这道题可以用点分治,但是我就是喜欢边分治 QAQ .   分治过程中,我们考虑经过分治边的路径的最大痛苦值.一条经过分治边的路径会被 ...

  4. TensorFlow从0到1之TensorFlow逻辑回归处理MNIST数据集(17)

    本节基于回归学习对 MNIST 数据集进行处理,但将添加一些 TensorBoard 总结以便更好地理解 MNIST 数据集. MNIST由https://www.tensorflow.org/get ...

  5. linux kernel update

    linux内核升级 最近HW行动,报出来的linux系统内核漏洞,环境中全部是2.6.32-431.el6.x86_64的主机,需要全部升级到754版本,这也是第一次进行内核升级操作. 先找了一台和生 ...

  6. 5、struct2的支持ModelDriver获得参数

    1.在以前的代码中我们我们需要获得jsp传递过来的参数我们采用下面的方式获得 package com.weiyuan.test; /** * struct2的action可以不继承任何框架的接口 * ...

  7. Python 简明教程 --- 17,Python 模块与包

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 正确的判断来源于经验,然而经验来源于错误的判断. -- Fred Brooks 目录 我们已经知道函 ...

  8. python+opencv图像增强——拉普拉斯

    img = cv2.imread(r'F:\python\work\cv_learn\clipboard.png',1) cv2.imshow('input',img) kernel = np.arr ...

  9. POJ 3463 Sightseeing 【最短路与次短路】

    题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...

  10. 【弹性碰撞问题】POJ 1852 Ants

    Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of ...