什麼是控制流程?簡單來說就是控制程序運行邏輯的,因爲程序一般而言不會直接一步運行到底,而是需要加上一些判斷,一些循環等等。舉個栗子,就好比你準備出門買個蘋果,把這個過程當成程序的話,可能需要先判斷一下外面是否下雨,下雨的話就得帶傘,否則就直接出門,同時,外面可能有很多家水果店,那去哪家買呢?這裏把價格放在第一要素,所以你會一家一家跑,直到找到最便宜的那家爲止。
其實,上述買蘋果的過程,已經用了兩種最常用的控制流程:條件和循環。畫個流程圖就像這樣:
通過這個圖,大家應該能很清楚的瞭解整個決策過程。其實在程序中也是這樣運行的,下面再來詳細的介紹一下這幾個流程控制語句。
1、條件語句if
條件語句用於判斷,就像上面的判斷是否下雨一樣,轉換成代碼就是:
if (isRaining == true){ //take a umbrella } //go out
跟if一起使用的是else以及else if,用作分支,比如說,分數在90-100分是優秀,80-90分是滿意,60-80分是及格,60分以下是不及格,那麼轉換成代碼如下:
if(mark >90 && mark <= 100){ //優秀 }else if(mark >80){ //滿意 }else if(mark >60){ //及格 }else{ //不及格 }
上述代碼中,使用了if跟else if 以及else的組合。如果mark是70分,則會先在if中判斷第一個條件,因爲不滿足括號內條件,不成立,則流程進入else if,判斷第二個條件是否滿足,發現第二個條件也不滿足,因此進入第三個條件,發現第三個條件滿足,因此會執行及格這一部分的代碼。
2.循環語句
Java的循環語句主要有這麼幾個:while,do while,for
while循環很簡單,先判斷後面的條件是否滿足,如果滿足則執行後續的代碼,一直循環執行,直到條件不成立爲止。舉個栗子,總分一百分,錯一個題扣十分,低於六十分則判定爲失敗。
while(循環條件){
循環體;
}
int mark = 100; while(mark>60){ mark -= 10; System.out.println(mark); }
這裏的"mark-=10"是"mark = mark - 10"的簡寫形式,這段代碼會依次輸出90,80,70,60,因爲60>60不成立,所以循環結束。
當然,循環中也可以用break跟continue來控制,break直接跳出當前循環,執行循環部分後面的代碼,而continue則是直接跳到本輪循環的末尾。舉個栗子:
int accout=0; while(true){ accout++; if(accout==5){ break; } if(accout==2){ continue; }
System.out.println("accout:"+accout);
}
這裏會依次輸出1,3,4,因爲account=2時,執行continue會跳過之後的代碼,直接跳到下一次循環,而account=5的時候,執行break,跳出循環。這裏的while用邏輯值true來控制也是比較常見的用法。
而do while跟while的區別在於,do while是先執行循環體,再判斷條件是否成立,就是說,不論如何,循環體至少會被執行一次。兩種循環適用的場合不一樣。舉個栗子。do-while 語句的語法格式爲:
do{
循環體;
}while(循環條件);
int i=0; do { System.out.println("我一定會執行一次的"); i++; }while(i<5);
這裏會輸出五次“我一定會執行一次的”。
再介紹一下最常用的循環,for循環,for 語句的基本結構如下所示:
for(初始化表達式;判斷表達式;遞增(遞減)表達式){
執行語句; //一段代碼
}
初始化表達式:初始化表達式的意義,在於定義循環之前變量的值是多少,如果沒有這一項,就不知道該從哪個值開始循環。
判斷表達式:判斷表達式的作用在於規定循環的終點。如果沒有判斷表達式,那麼此循環就成了死循環。
遞增(遞減)表達式:這一項規定每執行一次程序,變量以多少增量或減量進行變化
for(int i=0;i<5;i++){ System.out.println("i:"+i); }
初始化也可以放在循環之前:
int j=0; for(;j<=6;j=j+2){ System.out.println("j:"+j); }
如果要用for執行死循環的話:
for(;;){ System.out.println("yes"); }
如果既要執行死循環又要用參數進行控制的話:
int n=0; for(;;n=n+10){ System.out.println("n:"+n); }
for循環還有一個很常用的地方就是遍歷數組,所謂遍歷,就是一個一個訪問。
String[] strNum={"張三","李四","王五"}; for(String str:strNum){ System.out.println("name:"+str); }
關於數組的知識會在之後做講解,這裏不需要深究。
如果想要利用for實現多層循環的,可以這麼寫:
for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ System.out.print(j+" "); } System.out.println("i:"+i); }
具體的代碼效果,大家可以放計算機裏跑一跑,才能弄明白到底是怎麼回事。
Scanner in = new Scanner(System.in); System.out.print("Select a mark(A,B,C,D)"); char mark = in.next(); switch(mark){ case 'A': System.out.println("Wonderful!");
break; case 'B': System.out.println("Great!");
break;
case 'C': System.out.println("Good!");
break;
case 'D': System.out.println("Not Bad!");
break;
default: System.out.println("Error Input!");
break;
}
這裏先讀取你輸入的字母,然後switch語句會將它與case裏的條件一一對比,直到找到相符的項,然後執行後面的代碼.。如果你輸入的是ABCD之外的字母或是其他內容,由於沒有項與其匹配,則會執行default部分的代碼,輸出”Error Input“。這裏的每一句case後面都跟了一句break,如果不加break,則會順序執行,直到遇到break或者全部執行完畢。