def digitaleven(n:Int):Boolean = {
if (n%2==0){
return true
}
else {
return false
}
}
这是我到目前为止,但它只适用于单个数字号码,我如何使它使用递归(如果其他)的随机数字的数字?Scala:如何检查一个数字的每个数字是偶数还是奇数?
FE:我知道如何检查每个数字为偶数或奇数,正为最后一位数2%,N/10%2谢胜利去年等等...但我有困难来实现它
感谢您帮助
def digitaleven(n:Int):Boolean = {
if (n%2==0){
return true
}
else {
return false
}
}
这是我到目前为止,但它只适用于单个数字号码,我如何使它使用递归(如果其他)的随机数字的数字?Scala:如何检查一个数字的每个数字是偶数还是奇数?
FE:我知道如何检查每个数字为偶数或奇数,正为最后一位数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)
}
感谢您的回答!但我需要做它作为一个递归通过如果其他链,我不能用我的作业 – manonmars
首先,您需要确定您确定所有数字均匀并且返回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)
}
'(n%10)%2'等同于并可缩写为'n%2'。 –
一个一衬垫。
def digitaleven(n:Int):Boolean =
n == 0 || n % 2 == 0 && digitaleven(n/10)
感谢回答!但我需要做它作为一个递归通过如果其他链,我不能使用它为我的家庭作业 – manonmars
@manonmars编辑答案。请检查 – pamu