日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】选择结构排坑指南

發布時間:2025/3/15 java 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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("??");}}

這個程序的輸出是什么?
你可能會認為是:

大于100

因為會執行外層if不執行內層if,else的縮進對應著外層if…
很抱歉,真實的輸出是這樣的:

大于100 ??

這里就涉及到一個“空懸”的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內了,所以會被執行

舉的例子簡單的不能再簡單了,但是在實際的開發中如果有一點點的錯誤都可能產生很大的問題,我就體會過,所以建議讀者養成良好的習慣,不應該省略的就不要省略
之前看網上寫的:程序員總是喜歡假設他們自己是對的
人都希望自己是對的,這點我不否認,但是如果你是一個認真負責的人,就應該做好最壞的假設不是嗎?
記得之前看有的學了半年多編程的人寫的代碼,一個簡簡單單的問月份算價格的程序
居然有這樣的結構:

...... if(x>=4&&x<=11).................. else.................. ......

看了就感覺很迷,寥寥幾行的程序中,13月是學了半年編程的人不需要考慮的嗎?if總不加括號是對的嗎?
我仍所知甚少,但是我希望能以一顆認真虔誠的心對待編程,希望你也是

總結

以上是生活随笔為你收集整理的【Java】选择结构排坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。