Scala:如何检查数字的每个数字是偶数还是奇数?

时间:2016-11-12 15:41:06

标签: scala

def digitaleven(n:Int):Boolean = {

if (n%2==0){
return true
}

else {
return false
}
}

这是我到目前为止所得到的,但它仅适用于单位数字,我如何使用递归(如果没有)使用随机数字的数字?

f.e。:我知道如何检查偶数或奇数的每个数字,最后一个数字的n%2,最后一个数字的n / 10%2等等......但是我很难实现它

感谢您的帮助

5 个答案:

答案 0 :(得分:2)

的forall

使用forall检查每个数字是否均匀(您无需使用map进行转换。请在forall内进行转换。

def isAllEven(n: Int) = s"$n".forall(_.asDigit % 2 == 0)

递归(尾递归)

def isAllEven(n: Int): Boolean = {
  val digits = s"$n".toList

  def helper(rest: List[Char]): Boolean = rest match {
    case Nil => true
    case x :: xs => 
      if (x.asDigit % 2 == 0) 
        helper(xs)
      else false
  }

 helper(digits)
}

上面的函数将数字转换为字符串表示形式,然后将字符串转换为字符列表,然后检查每个字符是否为偶数。

您的代码可以写成如下所示,但不会检查每个数字是否均匀。

def digitaleven(n:Int): Boolean = n % 2 == 0

您的代码会检查号码是否均匀。但它不会检查数字中的每个数字是否均匀。为了做到这一点,使用上面的递归函数。

答案 1 :(得分:1)

这个怎么样:

def allDigitsEven(number:Int) = {
  number.toString.map(_.asDigit).forall(_%2==0)
}

答案 2 :(得分:1)

首先,您需要确定您确定所有数字均为偶数并返回true的基本情况。然后,如果您不确定所有数字但当前数字是偶数,则输入递归情况以检查所有其他数字是否均匀。

完全可以只使用你的那些公式。

答案 3 :(得分:1)

另一种方式:

// Using explicit recursion and pattern matching
def digitaleven(n:Int):Boolean = n match {
  case 0 => true
  case n => ((n % 10) % 2 ==0) && digitaleven(n / 10)
}                                                 

答案 4 :(得分:1)

单行。

def digitaleven(n:Int):Boolean =
  n == 0 || n % 2 == 0 && digitaleven(n/10)