任务:
- 1.定义一个函数,输出省份编号,返回省份的名称 eg: 42 湖北 & 11 北京
package matchcase
object matchcase01 {
def main(args: Array[String]): Unit = {
println(getProvinceName(11)) // 输出:北京
println(getProvinceName(42)) // 输出:湖北
println(getProvinceName(12)) // 输出:未知
}
private def getProvinceName(code: Int): String = {
code match {
case 42 => "湖北" // 统一缩进,规范格式
case 11 => "北京"
case _ => "未知" // case _ 匹配所有未明确指定的情况
}
}
}
match case的用法:
- (1)类似于if else if 这种多分支选择结构,精确匹配值
- ①.case_是不可省略的,如果匹配不成功,又没有case_,程序会报错
- ②.case_必须放在最后
- (2)匹配元组元素的数量
package matchcase
object matchcase02 {
def main(args: Array[String]): Unit = {
val xiaohong = (60, 100, 100)
val xiaoming = (80, 90)
getScore(xiaohong)
getScore(xiaoming)
getScore(1, 2, 3, 4)
val age:Int = 10
}
def getScore(score: Any*): Unit = {
score match {
case a :: b :: c :: Nil => println(s"元组中有三个元素: a = ${a}, b = ${b}, c = ${c}")
case a :: b :: Nil => println(s"元组中有两个元素: a = ${a}, b = ${b}")
case _ => println("未知")
}
}
}
(3).匹配变量类型
package matchcase
object matchcase {
def main(args: Array[String]): Unit = {
testType(1)
testType(1.1)
testType("1")
}
def testType(i: Any): Unit = {
i match {
case _: Int => println("你输入的是 Int")
case _: Boolean => println("你输入的是 Boolean")
case _ => println("else")
}
}
}
(4).匹配元素特征
package matchcase
object matchcase04 {
object ArrayMatch {
def main(args: Array[String]): Unit = {
testType(Array(1, 2, 3, 4))
testType(Array(1, 2, 3))
testType(Array(1, 2))
testType("hello")
}
def testType(arr: Any): Unit = {
arr match {
case Array(x, y, z, w) => println(s"第一个是${x}, 第二个是${y}, 第三个是${z}, 第四个是${w}")
case Array(x, y, z) => println(s"第一个是${x}, 第二个是${y}, 第三个是${z}")
case Array(x, y) => println(s"第一个是${x}, 第二个是${y}")
case _ => println("其他")
}
}
}
}
(5).样例类及其属性
package matchcase
object matchcase05 {
// 定义圆的样例类
case class Circle(radius: Double)
// 定义矩形的样例类
case class Rectangle(width: Double, height: Double)
def getArea(obj: Any): Unit = {
obj match {
case Circle(radius) => println(s"圆的面积是: "+ radius * radius*3.14)
case Rectangle(width, height) => println(s"矩形的面积是:" +width * height)
case _ => println("未知形状")
}
}
def main(args: Array[String]): Unit = {
getArea(Circle(2))
getArea(Rectangle(2, 3))
getArea("abc")
}
}
(6).变量声明中的模式匹配
package matchcase
object matchcase06 {
def main(args: Array[String]): Unit = {
val arr = Array(1, 2, 3, 5, 6)
// 定义三个变量,分别设置初始值为arr的前三个元素的值
var a = arr(0)
var b = arr(1)
var c = arr(2)
println("a = "+1+" b =" +b+"c="+c)
// 使用模式匹配,将arr的前三个元素分别赋值给a,b,c
val Array(x, y, z, _*) = arr
// _* 占位,表示至少3个部分赋值给前几个
println("x = "+x+" y = "+y+" z ="+z)
}
}