2013-04-18 204 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); 
     } 
    }