美文网首页
比较有水准的java面试题

比较有水准的java面试题

作者: 七七阳光 | 来源:发表于2019-03-25 13:01 被阅读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));  //偶数
        }
    

    相关文章

      网友评论

          本文标题:比较有水准的java面试题

          本文链接:https://www.haomeiwen.com/subject/vyuvvqtx.html