2016-11-12 226 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) 
相關問題