1. 程式人生 > >如果你不改需求還能做朋友 不然我就死給你看

如果你不改需求還能做朋友 不然我就死給你看

java零基礎入門-核心語法篇(六) 流程控制

順序結構

順序結構就是從上到下,從左到有。如果不按照這個順序來,就會發生錯誤,我們來看看

順序錯誤

我們使用變數的順序,一般是首先宣告變數,再去使用變數,而如果你改變這個順序的話,先使用,再宣告,使用的時候就會報錯。有些同學會問,為什麼他不去樓下看看有沒有,萬一樓下有呢?沒辦法,他的智商暫時達不到。這樣我們可以看到,在任何一個程式碼塊裡面,程式的執行都是從上到下。如果一個類裡面有很多方法,方法的呼叫順序就不一定了,這個後面再說。

這裡我們看到了一個problems的視窗,這個視窗可以告訴我們詳細的報錯位置和報錯資訊,我們要學會使用這個工具幫助我們排除錯誤。如果你的介面裡面沒有,那麼請這樣開啟它。

開啟problems視窗

所有你想要的視窗,我們都可以通過這種方式來開啟,提高我們的編碼效率。

 

分支結構

來來來 ,說重點了,敲黑板~~~!!!

你以後工作有50%的概率甚至更高在寫這個,if else 流程控制語句,當然有很多方法是可以替代這個重複工作的,比如用一點點設計模式啊,但是,我勸你3年內還是老老實實用這個吧。

首先,我們看看流程控制怎麼用

流程

我們看到,如果modify是true的話,會列印 “我死給你看”,而modify是false的話,會執行“還能做朋友”,所以不修改需求,還能做朋友是正確的。這裡要注意 if 後面的括號裡,一定要是 boolean 

型別的結果。上期講的運算子裡面有說過,比較運算和邏輯運算結果都是boolean,所以這個括號裡要放比較運算和邏輯運算,當然直接放boolean型別變數也是可以的。

這個if else 其實有3種用法,我上面寫的 if else 是最常用的,還有兩種我們看看

常用的分支結構

只有一個 if ,需要對特殊情況進行處理的時候,用的比較多。比如一段程式碼是選擇你喜歡什麼狗,但是有調皮的人說我喜歡貓,這裡加個if語句,如果喜歡貓請出門右轉,喜歡狗的繼續執行下面的程式碼。

......

if(喜歡貓){

    出門右轉不送

}

請選擇你喜歡的狗

if(...){

}else if(...){

} else {

}

......

if else 結構 , 一般用於非此即彼的邏輯判斷,比如,要麼不改需求,要麼改需求,沒有第三種情況了。這種結構使用if else。

 

一個if ,多個 else if ,一個else ,常用於對程式邏輯進行分別處理。比如一個寵物醫院,來了狗看病怎麼處理,來了貓怎麼處理,現在人養的寵物越來越多了,什麼猴啊,飛鼠啊,豬啊,這些來了怎麼處理

if (狗){

}else if( 貓 ){

}else if(豬){

}

這裡有個問題,首先是最後那個else其實是可以省略的,但是通常不建議這樣做,因為,你會發現,你的程式會突然好像運行了,但是又像沒執行,因為結果不在你設定的任何一個範圍內,就不會有輸出結果。所以加上else,可以保證你沒有考慮到的情況得到輸出。

請在最後加上else

 

再一個很重要的問題就是一定要留意多個語句一定要覆蓋全集,並且最好不要有交集。啥意思?一臉懵比?上圖

45歲的小鮮肉

首先看覆蓋全集,顯然這幾個條件沒有覆蓋全集,如果小於或者等於15歲,就會不報錯,不輸出,找不到問題。然後就是交集的問題,為什麼45歲還是小鮮肉?因為分支語句也是按照從上到下的順序來判斷的,如果寫在前面的條件滿足了,是不會再往下匹配的,而是直接結束這個分支語句,就是說他先判斷了 45 > 15,這個結果是成立的,然後就直接輸出了 “小鮮肉”,然後就結束了,不會往下去判斷 45 > 15了。而這個錯誤也是經常會犯的邏輯錯誤,我們的分支結構不能有交集,比如我這裡 45 即大於15 又大於40,滿足兩個條件,他就不會去我真實想要他去的地方。

 

覆蓋全集沒有交集

來看這個,覆蓋了全集,沒有交集,這樣才會得到正確的答案。

還有一種要避免的情況,就是過多的層次分支巢狀,這樣不僅難以組織邏輯,給閱讀程式碼也帶來很大的麻煩。要知道,你寫的程式碼不一定只有你一個人看,可能會有同事啊,或者後來的同事啊會看你的程式碼,修改業務,所以程式碼一定要具有可讀性。千萬別寫那種就你一個人認識的程式碼,也不要寫邏輯過於混亂的程式碼,那樣會有人邊看程式碼邊說 @#[email protected]#%^B& 的。

 

不要寫這種程式碼

 

再來說另外一種分支結構 switch

說實話,這個結構用的比較少,因為,寫起來比較繁瑣,而且功能可以被if else 完全取代,所以我們瞭解一下即可。

switch

switch後面的條件,是一個變數(petHospital),該變數的型別可以是 int,char,String (字串型別,馬上會說這個)。然後就講完啦。。。

 

迴圈結構

這是一個考驗智商的結構,本人剛開始接觸這個結構的時候也是被繞的昏頭轉向,特別是巢狀迴圈,所以剛開始理解這個有困難很正常,千萬不要自暴自棄。這個結構非常有用,用的好,我們可以使用一些演算法讓我們的程式碼執行的更加有效率,用的不好,電腦宕機,伺服器宕機都有可能,所以這個是重點中的重點,請好好理解,多加練習。

迴圈結構有以下幾種

for 迴圈 :使用頻率非常高,必須深刻理解,for迴圈是使用下標來標記元素的

foreach 迴圈:使用頻率也很高,在某些場景下,和for迴圈可以相互替代,foreach不使用下標標記元素

while 迴圈:使用頻率中等,一般用於處理流資料,在某些場景也可以被for迴圈替代

do while迴圈:很少使用,在某些特定場景會使用,知道即可,使用時查閱

 

本章篇幅有限,我們先把其他幾種迴圈講了,下一篇單獨介紹for迴圈,因為它實在太重要了

while迴圈:我們來一個從0列印輸出到100的例子

迴圈列印

迴圈結構需要初始化條件,就是你得告訴電腦,你要從哪開始。int intTest = 0; 就是初始化條件,從0開始。

while後面有個迴圈條件,裡面是個boolean值,跟 if 後面那個一樣,必須是布林型別,它來決定是否繼續下一次迴圈。

我這裡直接在列印的地方寫了迭代語句,迭代語句的作用就是改變初始化條件,讓它用新的值進行下一次迴圈。

好吧,我知道,這個動態過程用語言來描述是蒼白無力的,那我們動起來吧。

 

迴圈過程

WTF?我列印個100怎麼執行了102次?

這裡有個重要的概念,一定要養成習慣,就是在任何程式語言裡面,數數都是從0開始,比如我們的下標,但是我們計算次數什麼的會從1開始數,這樣就會造成誤解,從0列印到100,一共101次列印(從1數到100是100次,從0開始是101次),到102次時,迴圈條件返回false,停止迴圈。第102次是因為在判斷條件的時候,就終止了,其實並不算執行完成。這樣懂了吧。

這裡很重要的是迭代語句,有了他,我們才能迴圈下去,有人說了,自增++寫在後面是這樣,那寫在前面會是什麼樣。

 

自增在前面

其實很簡單,他就是在列印之前就已經自增了,所以是從1開始列印的。看最後一次,我們先輸出了intTest他是100的,然後列印++intTest是101,說明在列印之前已經完成了自增。這裡還順便複習了下上面的分支語句,我迴圈次數很多,但是我只想看最後一次的具體變化,我可以設定一個條件,比如intTest是100的時候,我再看發生了什麼,而不是每條都看,那樣會影響之前的結果,看起來不方便。

do while迴圈

 

do-while

其實如果理解了 while 迴圈,再看do-while,感覺是差不多的,值得注意的是while會先判斷條件再執行程式碼,條件不過關不執行,而do-while會先執行再判斷,即使不滿足條件也非要執行一次。

好好理解while迴圈,特別是迴圈過程,每個變數,每個判斷都是怎麼變化的,不然下次講for迴圈,就是這樣...

 

生無可戀