「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」
条件表达式
scala的 if/esle
语法结构与Java一样,但是在scala中 if/else
表达式有值,这个值就是跟在 if
或 else
之后表达式的值。
我们可以将 if/else
表达式的值赋予给变量
if&else
val s = if (x>0) 1 else -1
它等价于
if (x>0) s = 1 else s = -1
案例:
def main(args: Array[String]): Unit = {
println(computed(2))
println(computed(1))
println(computed(19))
def computed(value: Int): Int = {
val isEnd = 18
import math._
val s: Int = if (value >= 0 && value <= isEnd) value else -1;
s
}
}
——————————————————————————————————————————————————————————————————
输出:
2
1
-1
不过,第一种写法更好,因为它可以用来初始化一个 val
, 而第二种写法中, s
必须是 var
。
在Scala中,每个表达式都有一个类型。
如果是混合类型,则类型为 Any
。
如果 else
部分缺失,例如:
if (x>0) 1
等价于
if (x>0) 1 else ()
案例:
def main(args: Array[String]): Unit = {
println(computed(2))
println(computed(1))
println(computed(19))
def computed(value: Int): AnyVal = {
val isEnd = 18
val s = if (value >= 0 && value <= isEnd) value
s
}
}
__________________________________________________________
输出:
2
1
()
语句终止
在scala中,分号绝大多数情况下都不是必须的。不过如果你想在单行中写下多个语句,则需要将它们以分号隔开。
块表达式和赋值
在Scala中, {}
包含一系列表达式,块中最后一个表达式的值就是块的值。
def main(args: Array[String]): Unit = {
/**
* {}块的带值属性案例
*/
println(computed(10, 20))
def computed(value: Int, sum: Int) = {
val y = {
val x = value
x * x //返回的是10*10
} + {
sum * sum //返回的是20*20
}
y //返回的是100+400=500
}
}
__________________________________________________
输出:
500
在Scala中赋值语句是没有值的,所以别把它们串接在一起。
x = y = 1 //别这样做
输入和输出
使用 print
或者 println
打印一个值。
使用 printf
格式化输出。当然可以直接在输出语句中
def main(args: Array[String]): Unit = {
printExample()
def printExample(): Unit = {
//变量声明
val name = "Bessen"
val age = 80
val url = "www.bessen.com"
//字符串通过+号连接(类似java)
println("name=" + name + " age=" + age + " url=" + url)
//printf用法:字符串通过 % 传值,类似于C语言。
printf("name=%s, age=%d, url=%s \n", name, age, url)
//插值字符串:字符串通过$引用,类似于jQuery
println(s"name=${name}, age=$age, url=$url")
//字符串前加f格式化变量
println(f"name=${name}, age=${age}%.2f, url=$url")
//raw得到原始的值,不识别\n
print(raw"name=${name}, age=${age}%.2f, url=$url \n")
}
}
_______________________________________________________
输出:
name=Bessen age=80 url=www.bessen.com
name=Bessen, age=80, url=www.bessen.com
name=Bessen, age=80, url=www.bessen.com
name=Bessen, age=80.00, url=www.bessen.com
name=Bessen, age=80%.2f, url=www.bessen.com \n
使用 readLine
从控制台读取一行输入,如果是读取数字, Boolean
或者字符串,可以使用 readInt
, readDouble
, readByte
, readShort
, readLong
, readFloat
, readBoolean
或者 readChar
。与其他方法不同,readLine
带一个参数作为提示字符串。
def main(args: Array[String]): Unit = {
println(s"readInt:${readInt()}")
println(s"readDouble:${readDouble()}")
println(s"readByte:${readByte()}")
println(s"readShort:${readShort()}")
println(s"readLong:${readLong()}")
println(s"readFloat:${readFloat()}")
println(s"readBoolean:${readBoolean()}")
println(s"readChar:${readChar()}")
println(s"readLine:${readLine()}")
}
--------------------------------------------------
输出:
1
readInt:1
13
readDouble:13.0
12
readByte:12
14
readShort:14
12232345
readLong:12232345
456
readFloat:456.0
false
readBoolean:false
h
readChar:h
这是一行数据
readLine:这是一行数据
循环
scala支持 while
循环和 for
循环, while
循环与Java的 while
一样, for
循环语法如下:
for循环是支持嵌套使用的
def main(args: Array[String]): Unit = {
for (i <- 1 to 3; j <- 1 to 3)
print((10 * i + j) + " ")
println("\n等价于")
for (i <- 1 to 3)
for (j <- 1 to 3)
print((10 * i + j) + " ")
println("")
}
______________________________________________________
输出:
11 12 13 21 22 23 31 32 33
等价于
11 12 13 21 22 23 31 32 33
遍历字符串和数组时,你通常需要使用 0
到 n-1
的区间,这个时候可以使用 until
方法而不是 to
方法。 until
方法返回一个并不包含上限的区间。
def main(args: Array[String]): Unit = {
for (i <- 1 to 3) {
print(i)
}
println()
for (i <- 1 until 3) {
print(i)
}
println()
}
______________________________________________
输出:
123
12
另外for
循环还支持指定步长,在表达式当中使用by
关键字
def main(args: Array[String]): Unit = {
for (i <- 1 to 10 by 2){
print(i+"\t")
}
println()
}
___________________________________________
输出:
1 3 5 7 9
如果 for
循环的循环体以 yield
开始,则该循环会构造出一个集合,每次迭代出集合中的一个值:
def main(args: Array[String]): Unit = {
val result = for (i <- 1 to 10) yield i
println(result)
}
___________________________________________
输出:
Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
for
循环当中可以嵌套if
判断,在判断条件满足的时候才可以进入循环体
def main(args: Array[String]): Unit = {
val result = for (i <- 1 to 10 if i%2==0) yield i
println(result)
}
______________________________________________________
输出:
Vector(2, 4, 6, 8, 10)
这类循环叫做 for
推导式。
scala中没有break关键字
,但是可以采用对象的方式
进行中断
def main(args: Array[String]): Unit = {
breakable{
for (i<-1 to 10 ){
println(s"当前为数字$i")
if (i==5){
println(s"数字${i}进入了判断")
break()
}
}
}
}
________________________________________
输出:
当前为数字1
当前为数字2
当前为数字3
当前为数字4
当前为数字5
数字5进入了判断