分析问题并解决
根据一个值输出另一个与之对应的值,很容易就想到if else
match case的基本格式
高阶匹配之元组元素数量
前面的匹配都是精准匹配:变量和值是相等的。但是呢,scala中的模式匹配的规则是非常强大的,不一定是精准的匹配值,还可以根据元组的元素的个数来匹配。
match case 的用法
- 1、类似 if else 这种多分支选择结构,精确匹配值
- 2、1.case _ 是可选的:如果匹配不成功,又没有case _,程序会报错 2.case _ 必须要放在最后。
- 3、匹配类型
- (2)匹配元组类型 -(3)匹配元组类型 -(4)匹配元组类型 (5)样例类及其属性
object MatchCase {
def main(args: Array[String]): Unit = {
println(getProvinceName(11))
println(getProvinceName(42))
println(getProvinceName(12))
}
def getProvinceName(code: Int): String = {
code match {
case 42 => "湖北"
case 11 => "北京"
case _ => "未知"
}
}
}
object matchcase02 {
def main(args: Array[String]): Unit = {
val xiaohong = (100, 100, 100)
val xiaoming = (99, 98)
getScore(xiaohong)
getScore(xiaoming)
getScore(1,2,3,4)
}
def getScore(score: Any): Unit = {
score match {
case (a, b, c) => println("元组中有三个元素: a =" + a +" b = "+b+" c = "+c)
case (a, b) => println("元组中有两个元素: a =" + a +" b = "+b)
case _ => println("未知")
}
}
}
object matchexam3 {
def main(args: Array[String]): Unit = {
testType(1)
testType(1.1)
testType("1")
}
def testType(i:Any): Unit = {
i match {
case x:Int => println("当前类型是: Int")
case x:Double => println("当前类型是: Double")
case _ => println("未知")
}
}
}
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("圆形的面积是:" + radius * radius * 3.14)
case Rectangle(width,height) => println("矩形的面积是:" + width * height)
case _ => println("未知")
}
}
def main(args: Array[String]): Unit = {
getArea(Circle(2))
getArea(Rectangle(2,3))
getArea("abc")
}
}