【Java】选择结构排坑指南
最近在實踐中發現了一個問題,分享一下
眾所周知,Java的選擇結構和循環結構是允許單行不加大括號的
有的資料上會提倡這種模式,因為可以縮減代碼的行數
也有的不提倡,認為可能會在后期添加行數很麻煩以及出現意外的錯誤
下面略舉3例加以闡釋:
<1>“空懸”的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");elseSystem.out.println("??");}}這個程序的輸出是什么?
你可能會認為是:
因為會執行外層if不執行內層if,else的縮進對應著外層if…
很抱歉,真實的輸出是這樣的:
這里就涉及到一個“空懸”的else的“歸屬問題”了
Java不同于Python,Python是識別縮進的,Java認的是大括號,說的不好聽點就是你不縮進寫的一坨也許也沒事(只要你和你的小伙伴忍受得了)
在沒有指示的情況下,JVM會認為else對應著內層的if,所以就得到了“異?!钡妮敵?/p>
<2>“空懸”的if引發問題
public class Test2 {public static void main(String[] args) {int x = 200;if (x > 100)x++;elsex--;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++;elsex--;System.out.println(x);}}輸出結果:
200其實就是說else歸屬于第2個if了,先x++,后x–,就保持了200
這些問題就是說if后接單行代碼,后續維護時沒注意產生問題
<3>打分號但不換行以為還是一行
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內了,所以會被執行
舉的例子簡單的不能再簡單了,但是在實際的開發中如果有一點點的錯誤都可能產生很大的問題,我就體會過,所以建議讀者養成良好的習慣,不應該省略的就不要省略
之前看網上寫的:程序員總是喜歡假設他們自己是對的
人都希望自己是對的,這點我不否認,但是如果你是一個認真負責的人,就應該做好最壞的假設不是嗎?
記得之前看有的學了半年多編程的人寫的代碼,一個簡簡單單的問月份算價格的程序
居然有這樣的結構:
看了就感覺很迷,寥寥幾行的程序中,13月是學了半年編程的人不需要考慮的嗎?if總不加括號是對的嗎?
我仍所知甚少,但是我希望能以一顆認真虔誠的心對待編程,希望你也是
總結
以上是生活随笔為你收集整理的【Java】选择结构排坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx 配置 SSL 及 HTTPS
- 下一篇: java美元兑换,(Java实现) 美元