(一)分析问题并解决
根据身份证号码,输出这个人的籍贯。例如:42表示湖北,33表示浙江,11表示北京,31表示上海。
根据一个值输出另一个与之对应的值,很容易就想到if else
package matchcase
object case01 {
/*
三大结构
1.顺序结构
2.选择结构:
(1)if,if else if else;
(2) match case
3.循环结构
*/
def main(args: Array[String]): Unit = {
val code = "11"
var province = ""
if(code == "42"){
province = "湖北"
} else if(code == "11") {
province ="北京"
} else {
province = "未知"
}
}
直接用 match case 来改造。
package matchcase
object case01 {
/*
三大结构
1.顺序结构
2.选择结构:
(1)if,if else if else;
(2) match case
3.循环结构:
(1)
*/
def main(args: Array[String]): Unit = {
// val code = "11"
// var province = ""
//
// if(code == "42"){
// province = "湖北"
// } else if(code == "11") {
// province ="北京"
// } else {
// province = "未知"
// }
val code = "11"
val province = code match {
case "42" => "湖北"
case "11" => "北京"
case _ => "未知"
}
println(s"${code} 对应的省份是:${province}")
}
}
(二)match case的基本格式
执行流程是:如果value匹配到了pattern1,就执行结果1,如果都没有匹配到,就执行 _ 对应的内容。
通过例子来巩固下。
根据数值,输出对应的英文
package matchcase
object case02 {
/*
三大结构
1.顺序结构
2.选择结构:
(1)if,if else if else;
(2) match case
3.循环结构:
(2) for,
(3) while, do...while
*/
def main(args: Array[String]): Unit = {
val num = "1"
val word = num match {
case "1" => "one"
case "2" => "two"
case "3" => "three"
case "4" => "four"
case "5" => "five"
case _ => "other"
}
// 输入一个1-5的数字,打印它对应的英语单词。
println(s"${num} 对应的英文是:${word}")
}
}
(三)高阶匹配之元组元素数量
前面的匹配都是精准匹配:变量和值是相等的。但是呢,scala中的模式匹配的规则是非常强大的,不一定是精准的匹配值,还可以根据元组的元素的个数来匹配。
package matchcase
object case03 {
/*
match case 高阶匹配
1.匹配元组不同的数量
*/
def main(args: Array[String]): Unit = {
// 元组
val t1 = (1,2)
t1 match {
case (a,b) => println(s"有二个元素${a},${b}")
case _ => println("未知")
}
val arr1 = Array(10,2)
arr1 match {
case Array(1,x,y) => println("数组,第一个元素是1,长度为3")
case Array(10,x) => println("数组,第一个元素是10,长度为2")
case _ => println("其他")
}
}
}