比较有水准的java面试题

2019-03-25  本文已影响0人  七七阳光

最近遇到一个java面试题,比较经典,仔细思考了之后发现确实出得比较经典,
很容易就能看到你处于哪个水平.分享下。
题目大概是这样的,完成代码:判断给定的整数是否是奇数。好简单的题目是吧,
先别看后面的内容,自己试试看自己能手写出哪种水准的代码。

public boolean isOdd(int i){
}

看到最多的答案是,包括很多工作多年的朋友都有这么写的。

public boolean isOdd(int i){
    if(i % 2==1) {
        System.out.print("是奇数");
    } else {
        System.out.print("是偶数");
    }
}

别吐槽了,返回值都没指定,编译不过的吧。改进下

public boolean isOdd(int i) {
    if(i % 2==1) {
        System.out.print("是奇数");
        return true;
    } else {
        System.out.print("是偶数");
        return false;
    }
}

功能实现了,代码老长老长的,能不能再改进下

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

这下简单多了,如果整数位-1呢,咋办 ?再改吧

public boolean isOdd(int i) {
    return i % 2 ==1 || i % 2 == -1;
}

现在看起来好像已经不错。基本上也算过关的了。
能不能改进下呢?

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

还有不有更好的办法呢?继续看吧
这个算是一个改进吧:利用位运算。别忘记加括号哟。

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

再来一种比较看起来高大上的办法:利用位移的特性。

public boolean isOdd(int i) {
    return i >> 1 << 1 != i;
}

看起来好多办法,朋友们有什么感想啊。同样的功能实现的方法这么多,
那么那种效率高呢?是不是感觉好像位运算要高一些,那么实际上呢
你可以写测试代码来试试。记得用单元测试断言哦。少个括号多个括号都不得行的。

        @Test
    public void testName() {
                assertFalse(isOdd(2));  //偶数
        assertTrue(isOdd(1));   //奇数
        assertFalse(isOdd(0));  //偶数
        assertTrue(isOdd(-1));  //奇数
        assertFalse(isOdd(-2));  //偶数
    }
上一篇下一篇

猜你喜欢

热点阅读