一、if表达式

(1)if表达式的定义

在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值。

例如,val age = 30; if (age > 18) 1 else 0

可以将if表达式赋予一个变量,例如,val isAdult = if (age > 18) 1 else 0

另外一种写法,var isAdult = -1; if(age > 18) isAdult = 1 else isAdult = 0,但是通常使用上一种写法

(2)if表达式的类型推断

由于if表达式是有值的,而if和else子句的值类型可能不同,此时if表达式的值是什么类型呢?Scala会自动进行推断,取两个类型的公共父类型。

例如,if(age > 18) 1 else 0,表达式的类型是Int,因为1和0都是Int

例如,if(age > 18) "adult" else 0,此时if和else的值分别是String和Int,则表达式的值是Any,Any是String和Int的公共父类型

如果if后面没有跟else,则默认else的值是Unit,也用()表示,类似于java中的void或者null。例如,val age = 12; if(age > 18) "adult"。此时就相当于if(age > 18) "adult" else ()。

将if语句放在多行中:默认情况下,REPL只能解释一行语句,但是if表达式通常需要放在多行。

可以使用{}的方式,比如以下方式,或者使用:paste和ctrl+D的方式。
if(age > 18) { "adult" 
} else if(age > 12) "teenager" else "children"

二、 语句终结符、块表达式

默认情况下,scala不需要语句终结符,默认将每一行作为一个语句

一行放多条语句:如果一行要放多条语句,则必须使用语句终结符
例如,使用分号作为语句终结符,var a, b, c = 0; if(a < 10) { b = b + 1; c = c + 1 }
通常来说,对于多行语句,还是会使用花括号的方式
if(a < 10) {
    b = b + 1
    c = c + 1
}

块表达式:块表达式,指的就是{}中的值,其中可以包含多条语句,最后一个语句的值就是块表达式的返回值。
例如,var d = if(a < 10) { b = b + 1; c + 1 }

三、输入和输出

print和println:print打印时不会加换行符,而println打印时会加一个换行符。
例如,print("Hello World"); println("Hello World")
printf:printf可以用于进行格式化
例如,printf("Hi, my name is %s, I'm %d years old.\n", "Leo", 30)
readLine: readLine允许我们从控制台读取用户输入的数据,类似于java中的System.in和Scanner的作用。

综合案例:游戏厅门禁
val name = readLine("Welcome to Game House. Please tell me your name: ")
print("Thanks. Then please tell me your age: ")
val age = readInt()
if(age > 18) {
  printf("Hi, %s, you are %d years old, so you are legel to come here!", name, age)
} else {
  printf("Sorry, boy, %s, you are only %d years old. you are illegal to come here!", name, age)
}

四、循环

(1)while do循环

Scala有while do循环,基本语义与Java相同。
var n = 10
while(n > 0) {
  println(n)
  n -= 1
}

(2)Scala没有for循环,只能使用while替代for循环,或者使用简易版的for语句
简易版for语句:var n = 10; for(i <- 1 to n) println(i)

或者使用until,表式不达到上限:for(i <- 1 until n) println(i)
也可以对字符串进行遍历,类似于java的增强for循环,for(c <- "Hello World") print(c)

(3)跳出循环语句
 scala没有提供类似于java的break语句。
但是可以使用boolean类型变量、return或者Breaks的break函数来替代使用。
import scala.util.control.Breaks._
breakable {
    var n = 10
    for(c <- "Hello World") {
        if(n == 5) break;
        print(c)
        n -= 1
    }
}

(4)多重for循环

九九乘法表
for(i <- 1 to 9; j <- 1 to 9) {
  if(j == 9) {
    println(i * j)
  } else {
    print(i * j + " ")
  }
}

(5)if守卫

取偶数
for(i <- 1 to 100 if i % 2 == 0) println(i)

(6)for推导式

构造集合
for(i <- 1 to 10) yield i

Scala与Java差异(二)之条件控制与循环相关推荐

  1. python无限循环条件循环_Python - 条件控制、循环语句 - 第十二天

    Python 条件控制.循环语句 end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: Python 条件语句是通过一条或多条语句的执行结果(True 或 ...

  2. c++ for循环 流程图_python 零基础必知--条件控制与循环语句

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:somenzz 如果没有 if 语句和循环语句,请问你怎么 ...

  3. Scala与Java差异(四)之数组操作

    一.数组操作之Array.ArrayBuffer以及遍历数组 (1)Array 在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组.此外,由于Scala与Java都是运行在J ...

  4. python条件输出_python基础(二)条件判断、循环、格式化输出

    继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...

  5. python指定条件分类输出_python基础(二)条件判断、循环、格式化输出

    继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...

  6. Python学习 Day4-1 Python3 条件控制、循环语句

    Python3 条件控制 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: if 语句 Python中if语 ...

  7. Excel-VBA 快速上手(二、条件判断和循环)

    文章目录 一.条件判断 1.1. IF 判断 1.2. Select Case 判断 1.3. IIF 判断 二.循环 2.1. For 循环 2.1.1. 按次数循环 2.1.2. 数组遍历 2.2 ...

  8. 表达式、条件控制、循环

    表达式.流程控制.循环 1.什么是表达式 2.表达式的优先级 3.条件控制 4.循环语句 1) while循环 2) for循环 1.什么是表达式 表达式(Expression)是运算符(operat ...

  9. Scala与Java差异(六)之类定义

    一.类定义 (1)定义类,包含field以及方法 class ScalaClass {private var field = "one"def aMethod() { print( ...

最新文章

  1. 利用python3.x实现小爬虫下载贴吧内图片
  2. 如何去掉域名中的www?
  3. 用到f6的快捷键_RHINO快捷键这么多,GH电池组又太复杂怎么办?
  4. Flex Accordion 和 TabNavigator组件浏览器跳转问题
  5. IBASE read hierarchy
  6. [C++STL]常用集合算法
  7. Java线程start()vs run()方法及示例
  8. 相机标定(3) opencv中solvePnPRansac()和solvePnP()计算外参数
  9. 坚果pro2 android 8,手机 篇一:坚果Pro2特别版使用感受
  10. 乘风破浪:LeetCode真题_008_String to Integer (atoi)
  11. ISO 19011 《管理体系审核指南》
  12. c语言网页版在线编译器_C语言快速入门技巧
  13. Script Control 组件Win7 X64平台运行问题及示例
  14. 使用腾讯云托管部署前端项目
  15. windbg挂代理下载pdb
  16. nacos安装和配置
  17. 肿瘤特异性抗原行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  18. 在Win10下安装Anaconda3,“开始”菜单目录下只有Anconda prompt怎么办
  19. [论文笔记] 大型车牌检测数据集CCPD 阅读笔记
  20. java乘法逆元与除法取模,关于数论乘法逆元及相关知识点

热门文章

  1. mysql 错误 0152_SP2-1503 SP2-0152 错误解决
  2. [MyBatisPlus]常用注解_@TableName_@TableId_@TableField_@TableLogic通过全局配置配置主键生成策略
  3. [Java网络编程]UDP通信程序练习
  4. 后悔贪心+P2949 [USACO09OPEN]Work Scheduling G
  5. 并查集+基础知识点详解
  6. java.sql 拒绝连接_hive jdbc 拒绝连接问题
  7. cma检测_CMA检测方法
  8. mysql_result函数用不了_mysql_result()函数怎么在PHP中使用
  9. 微软100题第20题
  10. HDU4372 Count the Buildings