Java杂记3—流程控制之条件
流程控制
首先來介紹程序的流程控制。
所謂的流程控制,就是在我們前面的課程中我們已經(jīng)學(xué)過了變量,數(shù)據(jù)類型,運算符,表達式,這些都是計算機編程的基本元素,但是我們程序的基本執(zhí)行單元應(yīng)該是語句,程序執(zhí)行,執(zhí)行的不是表達式,而是執(zhí)行語句。就好像我們小時候先學(xué)認字兒,再學(xué)組詞,但最終要學(xué)造句,因為寫作文一定是一句話一句話的寫。
那么計算機程序一定會有多個語句,這個語句的執(zhí)行順序就叫做流程控制,我代碼中這么多語句先執(zhí)行誰后執(zhí)行誰,每個語句執(zhí)行幾遍,要不要執(zhí)行要不要不執(zhí)行這都叫流程控制。
順序執(zhí)行流程,我們的所有語句都放在主函數(shù)里,他一定是從主函數(shù)的第一句開始執(zhí)行,然后執(zhí)行第二句,第三句,直到把主函數(shù)中的每一句自上而下都執(zhí)行一遍的時候,程序執(zhí)行結(jié)束。比如我在主函數(shù)中寫十個打印語句,他一定是一句一句的執(zhí)行,這顯然是計算機軟件最基本的一種執(zhí)行流程,順序執(zhí)行流程。
條件分支流程
而現(xiàn)在我們要介紹的是條件分支流程,條件分支流程也叫做分支結(jié)構(gòu),選擇結(jié)構(gòu),它主要解決的是有些語句我在執(zhí)行以前要先去判斷一個條件,根據(jù)這個條件來決定這條語句,或者后面的某個代碼塊執(zhí)行或者不執(zhí)行。如果說以前的順序流程是每句話執(zhí)行一遍的話,條件分支結(jié)構(gòu)是每句話執(zhí)行0-1遍,也許條件成立會執(zhí)行,條件不成立這句話就會不執(zhí)行。
if語句
說到條件分支流程,最基本的語法就是一個if語句,語法結(jié)構(gòu)如下。
if(布爾表達式){代碼塊 } 復(fù)制代碼關(guān)鍵字if,If后面方一個圓括號 圓括號里寫什么?必須是一個布爾表達式 不可以寫整數(shù)。在C語言中布爾表達式和整數(shù)表達式是相同的,0表示假,非0值表示真,但是在java中真就是真 1就是1 真不是1 1也不是真 這是java和c的重要區(qū)別,其實也是java簡單性的體現(xiàn)。
解釋一下,例如int a = 10 int b =5
本來我要比較a和b是否相等,if(a==b) 但是我寫錯了,少寫了一個等號,寫成了if(a=b)。那么在java中一個等號是賦值表達式最后的結(jié)果是5 是會報錯的,但是在C中是沒有問題的,不會報錯。這樣的錯誤不能及時發(fā)現(xiàn)就會造成一定的問題,而實際上在C的開發(fā)中這也確實是一個問題。所以java在設(shè)計的時候就補上了這個漏洞,其結(jié)果就是在java中if后面的圓括號中只能夠放布爾表達式。
后面跟一個代碼塊 邏輯關(guān)系是當(dāng)布爾表達式為真的時候執(zhí)行代碼塊,為假的時候不執(zhí)行。所謂代碼塊就是一個花括號,咱們也沒少見,類啊,方法啊都是一個花括號。
舉個例子,用戶輸入一個整數(shù),我們通過程序來判斷這個整數(shù)是偶數(shù)還是奇數(shù),如果是偶數(shù)就輸出偶數(shù)到控制臺,如果是奇數(shù)就什么也不輸出。代碼如下:
Scanner s = new Scanner(System.in); int n = s.nextInt();if(n%i==0){System.out.println("偶數(shù)"); } 復(fù)制代碼這就是最基本的if語句。
if else語句
那么我們的邏輯繼續(xù)變化,如果那個數(shù)字兒是偶數(shù)就打印偶數(shù)兩個字兒,如果是奇數(shù)就打印奇數(shù)兩個字兒。那么這時候需要第二個語法結(jié)構(gòu),if else。
if(布爾表達式){代碼塊1 }else{代碼塊2 } 復(fù)制代碼當(dāng)布爾表達式為真的時候執(zhí)行代碼塊1,else就是否則的意思,什么叫否則,就是當(dāng)前面的那個布爾表達式為假的時候就執(zhí)行else后面的代碼塊,這就真正是條件分支了,代碼塊1和代碼塊2怎么著都會執(zhí)行一個,條件為真執(zhí)行代碼塊1,條件為假執(zhí)行代碼塊2。 根據(jù)這個邏輯我們對之前的代碼做一定的修改,如果條件為假else后面再加一個代碼塊打印奇數(shù)。
Scanner s = new Scanner(System.in); int n = s.nextInt();if(n%i==0){System.out.println("偶數(shù)"); }else{System.out.println("奇數(shù)"); } 復(fù)制代碼以上就是if else結(jié)構(gòu)。
if else if
下面我們看一下多重if else結(jié)構(gòu),它會有多個條件,語法結(jié)構(gòu)如下
if(條件1){代碼塊1 }else if(條件2){代碼塊2 }else if(條件3){代碼塊3 }else{代碼塊4 } 復(fù)制代碼先是if條件1,當(dāng)條件1成立的時候會執(zhí)行代碼塊1,else if條件2,else代表當(dāng)條件1不滿足的時候,進入這個else,判斷條件2,條件2成立執(zhí)行對應(yīng)代碼塊,然后執(zhí)行結(jié)束。如果進入第三個條件,說明前兩個條件都不滿足,這時候再來判斷條件3,如果不滿足條件3,就會到最后一個else中,最后一個可以加if也可以不加,實際上就是前面所有的條件都不滿足就會到最后的else代碼塊中。
根據(jù)這個語法邏輯舉個例子,加入輸入的整數(shù)是月份,根據(jù)輸入的整數(shù)判斷是那個季節(jié),1-3是春節(jié),4-6是夏季,依次。
Scanner s = new Scanner(System.in); int n = s.nextInt();if(n<=3){System.out.println("春天"); }else if(n<=6){System.out.println("夏天"); }else if(n<=9){System.out.println("秋天"); }else{System.out.println("冬天"); } 復(fù)制代碼以上是關(guān)于if語句所有的語法結(jié)構(gòu),額外的再說一點,if語句可以根據(jù)實際的需要進行嵌套,至于嵌套的層數(shù)沒有限制。
條件本質(zhì)
所有的java代碼在執(zhí)行的時候最后都會被程序最終都是一條條的指令,CPU有一個指令指示器,指向下一條要執(zhí)行的指令,CPU根據(jù)指示器的指示加載指令并且執(zhí)行。指令大部分是具體的操作和運算,在執(zhí)行這些操作時,執(zhí)行完一個操作后,指令指示器會自動指向挨著的下一個指令。
而有一種特殊的指令,稱為跳轉(zhuǎn)指令,這些指令會修改指令指示器的值,讓CPU跳到一個指定的地方執(zhí)行。跳轉(zhuǎn)有兩種,一種是條件跳轉(zhuǎn),另一種是無條件跳轉(zhuǎn)。條件跳轉(zhuǎn)檢查某個條件,滿足則進行跳轉(zhuǎn),無條件跳轉(zhuǎn)則是直接進行跳轉(zhuǎn)。條件分支流程在執(zhí)行的時候,if, else實際上都會轉(zhuǎn)換為這些跳轉(zhuǎn)指令。
下節(jié)預(yù)告:switch選擇結(jié)構(gòu),為什么switch后面的括號中只能夠填如byte,int等類型?
我不能保證每一個地方都是對的,但是可以保證每一句話,每一行代碼都是經(jīng)過推敲和斟酌的。希望每一篇文章背后都是自己追求純粹技術(shù)人生的態(tài)度。
永遠相信美好的事情即將發(fā)生。
總結(jié)
以上是生活随笔為你收集整理的Java杂记3—流程控制之条件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven开发工具安装
- 下一篇: 【跃迁之路】【448天】刻意练习系列20