2016-11-12 231 views
-1
def digitaleven(n:Int):Boolean = { 

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

else { 
return false 
} 
} 

这是我到目前为止,但它只适用于单个数字号码,我如何使它使用递归(如果其他)的随机数字的数字?Scala:如何检查一个数字的每个数字是偶数还是奇数?

FE:我知道如何检查每个数字为偶数或奇数,正为最后一位数2%,N/10%2谢胜利去年等等...但我有困难来实现它

感谢您帮助

回答

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 

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

+0

感谢回答!但我需要做它作为一个递归通过如果其他链,我不能使用它为我的家庭作业 – manonmars

+0

@manonmars编辑答案。请检查 – pamu

1

这个什么:

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

感谢您的回答!但我需要做它作为一个递归通过如果其他链,我不能用我的作业 – manonmars

1

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

完全可能只使用你的公式。

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) 
}             
+0

'(n%10)%2'等同于并可缩写为'n%2'。 –

1

一个一衬垫。

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