Day03
📌 运算符
Scala运算符的本质也是对象的方法:
- 当调用对象的方法时,
.
可以省略。 - 当方法没有参数时,
()
可以省略。
如2.toString()
可省略为2 toString
。
object Learn01_Operator {
def main(args: Array[String]): Unit = {
println(10 / 3) // 输出3
// println((10.0 / 3).formatted("%2.2f")) // 输出3.33
// Scala 3.4.1:"Use `formatString.format(value)` instead of `value.formatted(formatString)`"
println("%.2f".format(10.0 / 3)) // 输出3.33
println(-5 % 3) // 输出2
val s1: String = "abc"
val s2 = new String("abc")
println(s1 == s2) // 打印true,比较内容
println(s1.eq(s2)) // 打印false,比较地址
// scala运算符本质也是对象的方法
println(1.1.+(2))
// 1.当调用对象的方法时,.可以省略
println(1.1 + 2)
// 2.当方法没有参数时,()可以省略
println((1.1 + 2) toInt)
}
}
📌 条件分支
- Scala没有
Switch
,而是使用模式匹配match-case
来处理。 - Scala的分支语句可以带返回值,以分支语句内最后一行作为返回值。
- Scala提供了类似三元运算符的写法,如:
if (str > 0) str else "非正数"
。
import scala.io.StdIn
object Learn02_Condition {
def main(args: Array[String]): Unit = {
// Scala的分支语句可以带返回值
val str = StdIn.readLine().toInt
var res: Any = if (str > 0) { // 判定语句后只有一行代码时,花括号`{}`可以省略
println("正数")
str
} else if (str == 0) {
println("零")
0
} else {
println("负数")
"负数"
}
println(res)
// 类似三元运算符的写法
res = if (str > 0) str else "非正数"
println(res)
}
}
📌 For循环
循环的三种方式:for、while、do-while,使用后两者时需要外部变量,推荐用for循环。
🚁 范围遍历
- 包含边界的范围遍历:
for (i <- 1 to 3)
。 - 不包含边界的范围遍历:
for (i <- 1 until 3)
。 - 设置步长为3:
for (i <- 1 to 3 by 3)
。 - 设置倒序遍历:
for (i <- 1 to 3 reverse)
。
object Learn03_Cycle {
def main(args: Array[String]): Unit = {
// 1.for循环,范围遍历,包含边界[1, 3],并设置步长为3
for (i <- 1 to 3 by 3) {
println(i) // 1
}
// 2.for循环,范围遍历,不包含边界[1, 3),并设置倒序输出
for (i <- 1 until 3 reverse ) {
println(i) // 2, 1
}
// 4.小数的循环遍历
import scala.math.BigDecimal.RoundingMode
val start = BigDecimal("10.9")
val end = BigDecimal("11.0")
val step = BigDecimal("0.1")
for (i <- start to end by step) {
println(i.setScale(1, RoundingMode.HALF_UP)) // 四舍五入,保留1位小数
}
// 7.for循环遍历集合,执行操作后返回新的集合
val list1 = List(8, 9)
val list2 = for (i <- list1) yield i - 2
println(list2)
}
}
🚁 跳出循环
- Scala没有
break
,通过Breaks类的break方法,捕捉、抛出异常的方式来终止循环。 - Scala没有
continue
,以循环守卫代替,类似在循环中加条件判断:for (i <- 1 to 10 if i % 10 == 0)
。 - 在循环中需要引入变量或者嵌套循环,也类似循环守卫的方式,直接在循环中加入对应的语句即可。
import scala.util.control.Breaks
object Learn03_Cycle {
def main(args: Array[String]): Unit = {
// 3.Scala没有continue,以循环守卫代替,类似在循环中加条件判断
for (i <- 1 to 10 if i % 10 == 0) {
println(i)
}
// 5.嵌套循环
for (i <- 1 to 3; j <- 1 to i) {
print(s"$j*$i=${i * j}\t")
if (j == i) println()
}
// 6.循环中引入变量
for (i <- 1 until 3; j = 4 - i) {
// val j = 4-i
println(j)
}
// 8.Scala没有break,通过抛出异常的方式来终止循环
// Breaks类的break方法,实现异常的抛出和捕捉
Breaks.breakable {
for (i <- 1 to 10) {
if (i == 2) Breaks.break()
println(i)
}
}
}
}