繁体   English   中英

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

[英]Scala : How to check every single digit of a number is even or odd?

def digitaleven(n:Int):Boolean = {

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

else {
return false
}
}

这是我到目前为止所得到的,但是它仅适用于一位数字,我如何使用递归(如果使用其他方法)使其具有随机数字呢?

fe:我知道如何检查每个数字的偶数或奇数,n%2用于最后一位,n / 10%2用于第二位等等,但是我很难实现它

谢谢你的帮助

对全部

使用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

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

那这个呢:

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

首先,您需要确定一个基本情况,以确保所有数字都是偶数并返回true 然后,如果您不确定所有数字,但当前数字是偶数,则输入递归大小写以检查所有其他数字也是偶数。

仅使用您的公式完全有可能。

其他方式:

// 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)
}                                                 

一线。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM