摘要:流程控制首先來介紹程序的流程控制。后面跟一個代碼塊邏輯關系是當布爾表達式為真的時候執行代碼塊,為假的時候不執行。
流程控制
首先來介紹程序的流程控制。
所謂的流程控制,就是在我們前面的課程中我們已經學過了變量,數據類型,運算符,表達式,這些都是計算機編程的基本元素,但是我們程序的基本執行單元應該是語句,程序執行,執行的不是表達式,而是執行語句。就好像我們小時候先學認字兒,再學組詞,但最終要學造句,因為寫作文一定是一句話一句話的寫。
那么計算機程序一定會有多個語句,這個語句的執行順序就叫做流程控制,我代碼中這么多語句先執行誰后執行誰,每個語句執行幾遍,要不要執行要不要不執行這都叫流程控制。
順序執行流程,我們的所有語句都放在主函數里,他一定是從主函數的第一句開始執行,然后執行第二句,第三句,直到把主函數中的每一句自上而下都執行一遍的時候,程序執行結束。比如我在主函數中寫十個打印語句,他一定是一句一句的執行,這顯然是計算機軟件最基本的一種執行流程,順序執行流程。
條件分支流程而現在我們要介紹的是條件分支流程,條件分支流程也叫做分支結構,選擇結構,它主要解決的是有些語句我在執行以前要先去判斷一個條件,根據這個條件來決定這條語句,或者后面的某個代碼塊執行或者不執行。如果說以前的順序流程是每句話執行一遍的話,條件分支結構是每句話執行0-1遍,也許條件成立會執行,條件不成立這句話就會不執行。
說到條件分支流程,最基本的語法就是一個if語句,語法結構如下。
if(布爾表達式){ 代碼塊 }
關鍵字if,If后面方一個圓括號 圓括號里寫什么?必須是一個布爾表達式 不可以寫整數。在C語言中布爾表達式和整數表達式是相同的,0表示假,非0值表示真,但是在java中真就是真 1就是1 真不是1 1也不是真 這是java和c的重要區別,其實也是java簡單性的體現。
解釋一下,例如int a = 10 int b =5本來我要比較a和b是否相等,if(a==b) 但是我寫錯了,少寫了一個等號,寫成了if(a=b)。那么在java中一個等號是賦值表達式最后的結果是5 是會報錯的,但是在C中是沒有問題的,不會報錯。這樣的錯誤不能及時發現就會造成一定的問題,而實際上在C的開發中這也確實是一個問題。所以java在設計的時候就補上了這個漏洞,其結果就是在java中if后面的圓括號中只能夠放布爾表達式。
后面跟一個代碼塊 邏輯關系是當布爾表達式為真的時候執行代碼塊,為假的時候不執行。所謂代碼塊就是一個花括號,咱們也沒少見,類啊,方法啊都是一個花括號。
舉個例子,用戶輸入一個整數,我們通過程序來判斷這個整數是偶數還是奇數,如果是偶數就輸出偶數到控制臺,如果是奇數就什么也不輸出。代碼如下:
Scanner s = new Scanner(System.in); int n = s.nextInt(); if(n%i==0){ System.out.println("偶數"); }
這就是最基本的if語句。
那么我們的邏輯繼續變化,如果那個數字兒是偶數就打印偶數兩個字兒,如果是奇數就打印奇數兩個字兒。那么這時候需要第二個語法結構,if else。
if(布爾表達式){ 代碼塊1 }else{ 代碼塊2 }
當布爾表達式為真的時候執行代碼塊1,else就是否則的意思,什么叫否則,就是當前面的那個布爾表達式為假的時候就執行else后面的代碼塊,這就真正是條件分支了,代碼塊1和代碼塊2怎么著都會執行一個,條件為真執行代碼塊1,條件為假執行代碼塊2。
根據這個邏輯我們對之前的代碼做一定的修改,如果條件為假else后面再加一個代碼塊打印奇數。
Scanner s = new Scanner(System.in); int n = s.nextInt(); if(n%i==0){ System.out.println("偶數"); }else{ System.out.println("奇數"); }
以上就是if else結構。
下面我們看一下多重if else結構,它會有多個條件,語法結構如下
if(條件1){ 代碼塊1 }else if(條件2){ 代碼塊2 }else if(條件3){ 代碼塊3 }else{ 代碼塊4 }
先是if條件1,當條件1成立的時候會執行代碼塊1,else if條件2,else代表當條件1不滿足的時候,進入這個else,判斷條件2,條件2成立執行對應代碼塊,然后執行結束。如果進入第三個條件,說明前兩個條件都不滿足,這時候再來判斷條件3,如果不滿足條件3,就會到最后一個else中,最后一個可以加if也可以不加,實際上就是前面所有的條件都不滿足就會到最后的else代碼塊中。
根據這個語法邏輯舉個例子,加入輸入的整數是月份,根據輸入的整數判斷是那個季節,1-3是春節,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("冬天"); }
以上是關于if語句所有的語法結構,額外的再說一點,if語句可以根據實際的需要進行嵌套,至于嵌套的層數沒有限制。
所有的java代碼在執行的時候最后都會被程序最終都是一條條的指令,CPU有一個指令指示器,指向下一條要執行的指令,CPU根據指示器的指示加載指令并且執行。指令大部分是具體的操作和運算,在執行這些操作時,執行完一個操作后,指令指示器會自動指向挨著的下一個指令。
而有一種特殊的指令,稱為跳轉指令,這些指令會修改指令指示器的值,讓CPU跳到一個指定的地方執行。跳轉有兩種,一種是條件跳轉,另一種是無條件跳轉。條件跳轉檢查某個條件,滿足則進行跳轉,無條件跳轉則是直接進行跳轉。條件分支流程在執行的時候,if, else實際上都會轉換為這些跳轉指令。
下節預告:switch選擇結構,為什么switch后面的括號中只能夠填如byte,int等類型?
我不能保證每一個地方都是對的,但是可以保證每一句話,每一行代碼都是經過推敲和斟酌的。希望每一篇文章背后都是自己追求純粹技術人生的態度。永遠相信美好的事情即將發生。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69298.html
摘要:系列文章系列第一篇基礎雜記系列第二篇插件機制雜記系列第三篇流程雜記前言本身并不難,他所完成的各種復雜炫酷的功能都依賴于他的插件機制。的插件機制依賴于一個核心的庫,。是什么是一個類似于的的庫主要是控制鉤子函數的發布與訂閱。 系列文章 Webpack系列-第一篇基礎雜記 Webpack系列-第二篇插件機制雜記 Webpack系列-第三篇流程雜記 前言 webpack本身并不難,他所完成...
摘要:基礎簡單基礎數據類型值得注意的是的值是,表示一個空對象指針,沒有指向任何對象。的值是,表示申明變量或對象的屬性卻未初始化。值是派生自的,所以對他們執行相等測試會返回。字符串單引號和雙引號都可以用來表示字符串,只要前后一致即可。 目的 記憶總是會隨著時間而淡化,學習了點什么,就記錄下點什么。 做點什么,總比不做要好。 基礎 簡單(基礎)數據類型 Number ...
摘要:所以也就是說在沒有的基礎上,執行代碼會在串池中創建一個,也會在堆內存中再出來一個。不可變性的優點安全性字符串不可變安全性的考慮處于兩個方面,數據安全和線程安全。 摘要: String基本特性,String源碼,為什么String不可變? 前言 基于字符串String在java中的地位,關于String的常識性知識就不多做介紹了,我們先來看一段代碼 public class Test {...
摘要:前言本文為篤行日常工作記錄,爛筆頭系列。最終通過分析源碼了解到最終的確定是一個協商的過程,而不是簡單的配置生效。根據客戶端上報的和服務端自身的。如果上報的小于則設置為如果上報的大于則設置為如果介于兩則之間,則以上報的時間為準。 0.前言 本文為篤行日常工作記錄,爛筆頭系列。 源碼前面,了無秘密 — by 侯杰 近期的一個C++項目里使用了Zookeeper做服務發現,期間遇到了Sess...
摘要:前提最近通過閱讀官方文檔的事件模塊,有了一些思考和收獲,在這里記錄一下調用方法時需要手動綁定先從一段官方代碼看起代碼中的注釋提到了一句話的綁定是必須的,其實這一塊是比較容易理解的,因為這并不是的一個特殊點,而是這門語言的特性。 前提 最近通過閱讀React官方文檔的事件模塊,有了一些思考和收獲,在這里記錄一下~ 調用方法時需要手動綁定this 先從一段官方代碼看起: showImg(...
閱讀 2419·2021-10-11 10:57
閱讀 1274·2021-10-09 09:59
閱讀 1986·2019-08-30 15:53
閱讀 3206·2019-08-30 15:53
閱讀 1001·2019-08-30 15:45
閱讀 727·2019-08-30 15:44
閱讀 3433·2019-08-30 14:24
閱讀 946·2019-08-30 14:21