您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Java】选择结构排坑指南

星拱北辰 发布时间:2019-05-23 17:07:12 ,浏览量:0

最近在实践中发现了一个问题,分享一下

众所周知,Java的选择结构和循环结构是允许单行不加大括号的 有的资料上会提倡这种模式,因为可以缩减代码的行数 也有的不提倡,认为可能会在后期添加行数很麻烦以及出现意外的错误 下面略举3例加以阐释:

“空悬”的else引发问题

public class Test1 {
    public static void main(String[] args) {
        int x = 300;
        if (x > 100)
            System.out.println("大于100");
            if (x > 400)
                System.out.println("大于400");
        else
            System.out.println("??");
    }

}

这个程序的输出是什么? 你可能会认为是:

大于100

因为会执行外层if不执行内层if,else的缩进对应着外层if… 很抱歉,真实的输出是这样的:

大于100
??

这里就涉及到一个“空悬”的else的“归属问题”了 Java不同于Python,Python是识别缩进的,Java认的是大括号,说的不好听点就是你不缩进写的一坨也许也没事(只要你和你的小伙伴忍受得了) 在没有指示的情况下,JVM会认为else对应着内层的if,所以就得到了“异常”的输出

“空悬”的if引发问题

public class Test2 {
    public static void main(String[] args) {
        int x = 200;
        if (x > 100)
            x++;
        else
            x--;
        System.out.println(x);
    }

}

这个程序特别简单,肯定没问题,输出:

201

但是如果我后续加代码成这样:

public class Test2 {
    public static void main(String[] args) {
        int x = 200;
        if (x > 100)
            x++;
            if (x > 300)
                x++;
        else
            x--;
        System.out.println(x);
    }

}

输出结果:

200

其实就是说else归属于第2个if了,先x++,后x–,就保持了200

这些问题就是说if后接单行代码,后续维护时没注意产生问题

打分号但不换行以为还是一行

public class Test3 {
    public static void main(String[] args) {
        int x = 3;
        if (x > 2)
            if (x > 3)
                x++; x+=2;
        System.out.println(x);
    }

}

输出结果:

5

这是因为Java以;作为换行符,可能初学者认为自己没换行,实际上程序已经默认你换行了 x+=2;语句的条件已经不在if内了,所以会被执行

举的例子简单的不能再简单了,但是在实际的开发中如果有一点点的错误都可能产生很大的问题,我就体会过,所以建议读者养成良好的习惯,不应该省略的就不要省略 之前看网上写的:程序员总是喜欢假设他们自己是对的 人都希望自己是对的,这点我不否认,但是如果你是一个认真负责的人,就应该做好最坏的假设不是吗? 记得之前看有的学了半年多编程的人写的代码,一个简简单单的问月份算价格的程序 居然有这样的结构:

......
if(x>=4&&x            
关注
打赏
1660750074
查看更多评论
0.0412s