变量声明中的模式匹配
需求:现在有一个数组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)
}
}
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")
}
}
}
守卫语句的格式
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) 返回白羊座 。
白羊座是3月21日 ~ 4月19日
先匹配月份,然后使用守卫功能,判断日期是否满足条件。
package matchcase
/*
写一个函数,参数有两个,一个是月份,一个是日期。返回值是对应的星座
1月20日到2月18日:水瓶座
*/
object matchcase08 {
def getZodiac(month:Int, day:Int):String = {
month match {
case 1 if day >= 20 => "水瓶座"//月份是1,并且日期是>=20的
case 2 if day <= 18 => "水瓶座"//月份是2,并且日期是<=18的
case 2 if day >= 19 => "双鱼座"//月份是2,并且日期是>=19的
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 <= 23 => "天秤座"//月份是10,并且日期是<=23的
case 10 if day >= 24 => "天蝎座"//月份是10,并且日期是>=24的
case 11 if day <= 22 => "天蝎座"//月份是11,并且日期是<=22的
case 11 if day >= 23 => "射手座"//月份是11,并且日期是>=23的
case 12 if day <= 21 => "射手座"//月份是12,并且日期是<=21的
case 12 if day >= 22 => "摩羯座"//月份是12,并且日期是>=22的
case 1 if day <= 19 => "摩羯座"//月份是1,并且日期是<=19的
case _ =>"未知"
}
}
def main(args: Array[String]): Unit = {
println(getZodiac(1,19))//水瓶座
println(getZodiac(1,21))//水瓶座
}
}