def digitaleven(n:Int):Boolean = {
if (n%2==0){
return true
}
else {
return false
}
}
这是我到目前为止所得到的,但它仅适用于单位数字,我如何使用递归(如果没有)使用随机数字的数字?
f.e。:我知道如何检查偶数或奇数的每个数字,最后一个数字的n%2,最后一个数字的n / 10%2等等......但是我很难实现它
感谢您的帮助
答案 0 :(得分: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
您的代码会检查号码是否均匀。但它不会检查数字中的每个数字是否均匀。为了做到这一点,使用上面的递归函数。
答案 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)