条件表达式
语法结构:
if(条件表达式){
结果
}else if(条件表达式){
结果
}else{
结果
}
示例:
def main(args: Array[String]) {
var x = 100
val y = if (x > 0) 1 else -1 //判断x的值,将结果赋给y
println(y) //1
x = -100
val z = if (x > 1) 1 else "error" //支持混合类型表达式
println(z) //errot
x = 0
//如果缺失else,相当于if (x > 2) 1 else ()
val m = if (x > 2) 1
println(m) // ()
//在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
val n = if (x > 2) 1 else ()
println(n) // ()
x = 5
//if和else if
val k = if (x < 0) 0 else if (x >= 1) 1 else -1
println(k) //1
}
case
示例1:值匹配
def main(args: Array[String]): Unit = {
val i = StdIn.readInt();
i match {
case 1 => println("11111")
case 2 => println("222222")
case _ => println("......")
}
}
示例2:类型匹配
def main(args: Array[String]): Unit = {
val arr = Array("hello", 11, 22.0, -22.0)
val i = Random.nextInt(4)
println(i)
val v = arr(i)
println(v)
v match {
case x: Int => println("Int " + x)
case y: Double if (y >= 0) => println("Double " + y)
case z: String => println("String " + z)
case _ => throw new Exception("not match exception")
}
}
for循环
for循环语法结构:
for (i <- 表达式/数组/集合)
示例:
def main(args: Array[String]) {
//表达式1 to 10返回一个Range(区间),每次循环将区间中的一个值赋给i
for (i <- 1 to 10)
print(i + " ")
println()
println(1 to 3)
println(1 until(3)) //until产生的是一个左闭右开的区间
//循环遍历until生成的区间
for (i <- 0 until(6))
print(i+" ")
println()
//高级for循环
for (i <- 1 to 3; j = 4 - i) {
print(j + "\t")
}
//每个生成器都可以带一个条件,注意:if前面没有分号
for (i <- 1 to 3; j <- 1 to 3 if i != j) //注意:if前面没有分号
print(i + ":" + j + " ")
println()
}
示例:嵌套循环
def main(args: Array[String]): Unit = {
for (i <- 1 to 3; j <- 1 to 3) {
println("i =" + i + " j =" + j)
}
//上面代码等价于
for (i <- 1 to 3) {
for (j <- 1 to 3) {
println("i =" + i + " j =" + j)
}
}
}
示例:for循环中可以使用花括号{}代替小括号()
def main(args: Array[String]): Unit = {
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)
}
}
示例:控制步长
@Test
def fun3(): Unit = {
val r = Range(1, 10, 3)
println(r.toBuffer)
for (i <- Range(1, 10, 3)) { //左闭右开
print(i + "\t")
}
println()
//灵活的使用守卫 [推荐]
for (i <- 1 to 10 if i % 3 == 1) { //左闭右闭
print(i + "\t")
}
}
while循环
示例:
def main(args: Array[String]): Unit = {
var n = 1
while (n <= 10) {
print(n + "\t")
n += 1 //循环遍历的迭代
}
println("\r\n"+n)
}
do…while循环
示例:
def main(args: Array[String]): Unit = {
var sum = 0
var i = 1
do {
sum = sum + i
i = i + 1
} while (i <= 100)
println(sum) //5050
}
循环中断
Scala推荐使用函数式的风格解决break 和 contine 的功能,而不是关键字break/continue。
示例:
import util.control.Breaks._
@Test
def fun1(): Unit = {
breakable {
for (i <- 1 to 10) {
if (i == 5) {
break()
}
print(i + "\t")
}
}
println("\r\n程序继续....")
}
示例:使用循环守卫机制
@Test
def fun3(): Unit = {
var sum = 0
var flag = true
for (i <- 1 to 100 if flag == true) {
sum += i
if (sum > 20) {
println("当前的 i=" + i)
flag = false
}
}
println("\r\n程序继续....")
}