(一)、分析问题并解决
根据一个值输出另一个与之对应的值,很容易就想到if else
在java中有case语句,直接用 match case 来改造。
def main(args: Array[String]): Unit = {
val code = 12
val province = code match {
case 42 => "湖北省"
case 52 => "四川省"
case _ => "未知"
}
println(province)
}
(二)、match case的基本格式
执行流程是:如果value匹配到了pattern1,就执行结果1,如果都没有匹配到,就执行 _ 对应的内容。
(1) 如果把case _ 放在前面会怎么样?
(2)如果省略了case _ 并且没有匹配到的内容,会怎么样?
def main(args: Array[String]): Unit = {
// 输入1,输出单词one
// 输入2,输出单词two
// 输入3,输出单词three
// 输入其他,输出单词other
//1.如果能精准匹配成功,就会执行后面的代码
//2.case _ 它表示可以匹配任意的内容。一定要放在matchcase的最后一条
//3.case _ 不能省略:如果匹配不成功,就会报错。
//1.从键盘获取数字
val code = 10
//2.使用matchcase进行匹配
code match {
case 1 => println("one")
case 2 => println("two")
case _ => println("未知")
}
}
(三)、高阶匹配之元组元素数量
前面的匹配都是精准匹配:变量和值是相等的。但是呢,scala中的模式匹配的规则是非常强大的,不一定是精准的匹配值,还可以根据元组的元素的个数来匹配。
/**
* match case
* 1.匹配精确值
* 2.匹配数据类型
* 3.匹配元素的个数
*/
object matchcase03 {
def processNum(value:Any):Unit = {
value match {
case (a,b,c) => println(s"三个元素的元祖,第一个元素是${a}")
case (x,y) => println("两个元素的元祖")
case _ =>println("其他")
}
}
def main(args: Array[String]): Unit = {
// val obj = 10
// processValue(obj)
processNum((1,2))
processNum((1,2,3))
}
}