首页 > 解决方案 > 应该返回相同的值 3 个连续调用

问题描述

我有一个练习要在 Scala 中解决。我需要制定一种方法来决定有一天是否可以踢足球。这取决于是否下雨。下雨的概率小于20%。如果某天下雨,那么接下来的两天也会下雨。所以,我们将连续三天或下雨。我这样做了:

case class Weather() {

  var rainyDay = 0

  def rain = scala.util.Random.nextDouble() <= 0.2

  def canPlay = {
    rainyDay match {
      case 1 | 2 =>{
        rainyDay = rainyDay+1
        false
      }
      case _ => {
        rain match {
          case true => {
            rainyDay = 1
            false
          }
          case _ => true
        }
      }
    }
  }
}

我测试了它并且工作正常,但我想知道是否有更好的方法来做到这一点?

(对不起我的英语)

标签: scala

解决方案


如果您使用的是 Scala 2.13.x,那么您可能只是unfold()在无限Iterator.

case class Weather() {
  private val canPlayDay = Iterator.unfold(0)(state => Some {
    if (state > 0) (false, state-1)
    else if (util.Random.nextDouble() <= 0.2) (false, 2)
    else (true, 0)
  })

  def canPlay() : Boolean = canPlayDay.next()
}

注意:var不需要。


推荐阅读