判断一个数是否为奇数

2020-05-08  本文已影响0人  憨憨二师兄

2020-5-8

今天茶足饭饱之余,在知乎上看到了一篇文章《记一道简单的java面试题》

题目为:实现一个方法,判断一个整数是否为奇数。

应试者的第一段代码:

public boolean isOdd(int i) {
    if (i % 2 == 1) {
        return true;
    } else {
        return false;
    }
}

如果应试者真的写出这样的代码,我想应该基本就挂掉了吧。这段代码的问题是应试者没有考虑到输入的整数为负数的情况。例如当输入值为-1,这段代码返回的结果为false,另外既然返回值为布尔类型,就不需要多余的if...else判断语句。代码进而可以优化为:

public boolean isOdd(int i) {
    return i % 2 != 0;
}

这样一来,既增加了可读性,也使代码具有鲁棒性。

有没有更好的方法呢?或者说是否可以不通过取模的方式来完成这个函数

奇偶的区别在于最后一位是1还是0,我们只需要位运算操作,就可以将代码简化至:

public boolean isOdd(int i) {
    return (i & 1) == 1;
}

最后,在本篇文章中作者指出:

我:“这样是不是比上面取模运算要快?”
候选人:“那当然了,位运算肯定快啊。”
我:“但是我们实际代码测试过,发现上面的按位与操作和取模操作,实际运行的时间是差不多的,为什么呢?”

作者给出的解释:


这其实也解决了我一直以来的疑惑~

上一篇下一篇

猜你喜欢

热点阅读