-1

编写一个名为 hasAnOddDigit 的方法,该方法返回一个正整数的任何数字是否为奇数。如果数字至少有一个奇数位,则您的方法应该返回 true,如果没有一个数字是奇数,则返回 false。0、2、4、6、8是偶数,1、3、5、7、9是奇数。

例如,以下是对您的方法的一些调用及其预期结果:

返回的调用值 hasAnOddDigit(4822116) true hasAnOddDigit(2448) false hasAnOddDigit(-7004) true 您不应该使用字符串来解决此问题。

这是我对这个问题的尝试:

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) 它给了我一个假而不是真。

4

2 回答 2

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;
}
于 2013-04-18T16:05:41.623 回答
0

对某些人来说可能更直观的递归版本。

private boolean hasAnOddDigit(int num) {
        if (num<10) {
            return num%2==0 ?  false :  true;
        } else {
            return check(num%10) || check (num/10);
        }
    }
于 2013-04-18T16:28:14.477 回答