2013-04-18 125 views
-1

編寫一個名爲hasAnOddDigit的方法,該方法返回是否有任何正整數的數字是奇數。如果數字至少有一個奇數,則方法應該返回true;如果沒有數字是奇數,則返回false。 0,2,4,6和8是偶數位,並且1,3,5,7,9是奇數位。調用偶數和奇數

例如,這裏有你的一些方法調用和預期結果:

調用的返回值 hasAnOddDigit(4822116)真 hasAnOddDigit(2448)假 hasAnOddDigit(-7004)真 你不應該使用一個String來解決這個問題。

這是我試圖在這個問題:

public boolean hasAnOddDigit(int num){ 
int number=0; 

while (number > 0) { 
    number= number % 10; 
    number = number/10; 
} 
    if(number%2==0 && num%2==0){ 
     return false; 
    }else{ 
     return true; 
    } 


} 

調用的hasAnOddDigit(4822116),它給了我一個錯誤,而不是真實的。

+0

嘗試通過調試器逐步調試代碼。不要只是發瘋,問爲什麼它不工作,你永遠不會明白。 –

+0

我沒有調試器。只是在網上做隨機的做法。試着繪製它來解釋它,但仍然無法得到它。 – user2179615

+0

看看你方法中的前兩行。 –

回答

2

你的方法應該檢查每個數字,因爲它通過循環,而不是等待循環完成後才做出決定。目前,while循環將number運行至零,然後才嘗試檢查該值。當然,到循環結束時,兩個值都爲零,所以返回值爲false

public boolean hasAnOddDigit(int num){ 
    // You do not need to make a copy of num, because 
    // of pass-by-value semantic: since num is a copy, 
    // you can change it inside the method as you see fit. 
    while (num > 0) { 
     int digit = num % 10; 
     if (digit % 2 == 1) return true; 
     num /= 10; 
    } 
    // If we made it through the loop without hitting an odd digit, 
    // all digits must be even 
    return false; 
} 
0

遞歸版本可能更直觀一些。

private boolean hasAnOddDigit(int num) { 
     if (num<10) { 
      return num%2==0 ? false : true; 
     } else { 
      return check(num%10) || check (num/10); 
     } 
    }