(一)变量声明中的模式匹配
需求:现在有一个数组Array(1,2,3,4),我希望能定义三个变量,它们的值分别是数组中的第1,2,3个元素的值。
package matchcase
// match case 的用法
/*
*(6)变量声明中的模式匹配
*/
object matchcase06 {
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4,5)
// 定义三个变量,分别设置初始值为arr的前三个元素的值?
var a = arr(0)
var b = arr(1)
var c = arr(2)
println("a = " + a + " b = " + b + " c = " + c)
// 使用模式匹配器,将arr的前三个元素分别赋值给a,b,c
val Array(x,y,z,_*) = arr
// _* 占位符,多余的部分放在这儿
println("x = " + x + " y = " + y + " z = " + z)
}
}
(二)守卫语句的格式
守卫语句紧跟在case模式之后,通过if关键字引入
package matchcase
/*
知识点:守卫
value match {
case 模式 if 条件 => 执行的事情
}
*/
object matchcase07 {
def main(args: Array[String]): Unit = {
val a = 11
a match {
case x:Int if a > 10 => println("a是大于10的int")
case _ => println("a is not Int")
}
}
}
(四)案例-判断星座
目标任务,编写一个函数,参数是月份和日期,返回值是当前的星座。
例如,getZodiac(3, 24) 返回白羊座 。
package matchcase
/*
写一个函数,参数有两个,一个是月份,一个是日期,返回值是对应的星座
1月20日到2月18日:水瓶座
*/
object matchcase08 {
// 自己将12星座的条件,把代码补齐
def getZodiac(month: Int, day: Int): String = {
month match {
case 1 if day >= 20 => "水瓶座" // 月份是1,并且 日期是>=20的
case 2 if day <= 18 => "水瓶座" // 月份是2,并且 日期是<=18的
case 3 if day <= 20 => "双鱼座" // 月份是3,并且 日期是<=20的
case 3 if day >= 21 => "白羊座" // 月份是3,并且 日期是>=21的
case 4 if day <= 19 => "白羊座" // 月份是4,并且 日期是<=19的
case 4 if day >= 20 => "金牛座" // 月份是4,并且 日期是>=20的
case 5 if day <= 20 => "金牛座" // 月份是5,并且 日期是<=20的
case 5 if day >= 21 => "双子座" // 月份是5,并且 日期是>=21的
case 6 if day <= 21 => "双子座" // 月份是6,并且 日期是<=21的
case 6 if day >= 22 => "巨蟹座" // 月份是6,并且 日期是>=22的
case 7 if day <= 22 => "巨蟹座" // 月份是7,并且 日期是<=22的
case 7 if day >= 23 => "狮子座" // 月份是7,并且 日期是>=23的
case 8 if day <= 22 => "狮子座" // 月份是8,并且 日期是<=22的
case 8 if day >= 23 => "处女座" // 月份是8,并且 日期是>=23的
case 9 if day <= 22 => "处女座" // 月份是9,并且 日期是<=22的
case 9 if day >= 23 => "天秤座" // 月份是9,并且 日期是>=23的
case 10 if day <= 22 => "天秤座" // 月份是10,并且 日期是<=22的
case 10 if day >= 23 => "天蝎座" // 月份是10,并且 日期是>=23的
case 11 if day <= 21 => "天蝎座" // 月份是11,并且 日期是<=21的
case 11 if day >= 22 => "射手座" // 月份是11,并且 日期是>=22的
case 12 if day <= 21 => "射手座" // 月份是12,并且 日期是<=21的
case 12 if day >= 22 => "摩羯座" // 月份是12,并且 日期是>=22的
case 1 if day <= 19 => "摩羯座" // 月份是1,并且 日期是<=19的
// 这里可以继续补充其他星座的case条件
case _ => "未知"
}
}
def main(args: Array[String]): Unit = {
println(getZodiac(1, 19)) // 水瓶座
println(getZodiac(1, 21)) // 水瓶座
println(getZodiac(2, 23)) // 水瓶座
}
}