模式匹配-判断星座

31 阅读3分钟

变量声明中的模式匹配

需求:现在有一个数组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))//水瓶座

  }
}