一、選擇結構語句
選擇結構:也被稱為分支結構。選擇結構有特定的語法規則,代碼要執行具體的邏輯運算進行判斷,邏輯運算的結果有兩個,所以產生選擇,按照不同的選擇執行不同的代碼。
Java語言提供了兩種選擇結構語句:if語句和switch語句
1、if語句
if語句有三種語法格式。
(1)、if語句第一種語法格式(適合一種判斷)
if(條件表達式){
語句體;
}
執行流程:判斷條件表達式的結果,當為為true時,{}中的執行語句體才會執行,否則不執行語句體。
注意:
條件表達式的結果必須是布爾類型;if如果控制的語句只有一條,可以不寫中括號{},直接跟語句體,但如果跟多條語句,大括號不能省略,建議兩種情況下都寫。
代碼示例演示:
- //if語句第一種語法格式
- int i=6;
- if(i%2==0){
- System.out.println("if條件為true");
- }
- System.out.println("over");
輸出結果為:
if條件為true
over
(2)、if語句第二種語法格式(適合兩種判斷)
if(條件表達式){
語句體1;
}else{
語句體2;
}
執行流程:同樣先判斷條件表達式的結果,如果為true,則執行語句體1,為false則執行語句體2.
代碼示例演示:
- //if語句第二種語法格式
- int j=-2;
- if(j>0){
- System.out.println(j+"為正數");
- }else{
- System.out.println(j+"為負數");
- }
- System.out.println("over");
輸出結果為:
-2為負數
over
(3)、if語句第三種語法格式(適合多種判斷)
if(條件表達式1){
語句體1;
}else if(條件表達式2){
語句體2;
}
...
...
else if(條件表達式n){
語句體n;
}else{
語句體n+1;
}
執行流程:首先判斷條件表達式1的結果,如果為true,則執行語句體1,為false則繼續判斷條件表達式2的結果,如果為true,則執行語句體2,為false則繼續判斷下一個條件表達式的結果,以此類推,如果所有的判斷條件都為false,則意味着所有的條件均未得到滿足,則執行語句體n+1。
代碼示例演示:
- // if語句第三種語法格式
- int scores = 88;
- if (scores >= 90) {
- System.out.println("您的成績被評定為A級");
- } else if (scores >= 80) {
- System.out.println("您的成績被評定為B級");
- } else if (scores >= 70) {
- System.out.println("您的成績被評定為C級");
- } else if (scores >= 60) {
- System.out.println("您的成績被評定為D級");
- } else if (scores >= 0) {
- System.out.println("您的成績被評定為E級");
- } else {
- System.out.println("成績輸入有誤!!!");
- }
輸出結果為:
您的成績被評定為B級
2、switch語句
switch語句的語法格式:
switch(表達式){
case 目標值1:
執行語句1;
break;
case 目標值2:
執行語句2;
break;
......
......
case 目標值n:
執行語句n;
break;
default:
執行語句n+1;
break;
}
執行流程:switch語句將表達式的值與每個case中的目標值進行匹配,如果找到了匹配的值,會執行對應的case后的語句,遇到break就會結束。如果沒找到任何匹配的值,就會執行default后的語句,然后程序結束。
注意:
(1)、表達式接收的值類型:在switch語句中的表達式只能是byte、short、char、int類型的值,如果傳入其他類型的值,程序就會報錯。(JDK5.0引入enum枚舉和JDK7.0接收String類型)。
(2)、case后面跟的是要和表達式進行比較的值,語句體部分可以是一條或多條語句,break表示中斷,結束的意思,可以結束switch語句,default語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似。default可以省略,但一般不建議,default可以放在switch語句的任何位置,一般放在最后位置,放在最后位置時緊跟它的break可以省略。
(3)、switch結束的情況:當程序執行過程中遇到了break;當程序執行到了末尾處。
代碼示例演示:
- public class Demo {
- public static void main(String[] args) {
- int month = 12;
- switch (month) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- System.out.println(month + "月有31天!");
- break;
- case 2:
- System.out.println(month + "月有28天!");//這里暫不考慮閏年情況
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- System.out.println(month + "月有30天!");
- break;
- default:
- System.out.println("不存在該月!");
- break;
- }
- }
- }
輸出結果為:
12月有31天!
附:if和switch語句很像,那么在具體場景下如何合理選擇使用哪種語句呢?
(1)、能用switch語句實現的都可以用if語句替換,並且if語句的條件表達式沒有任何限制,但是switch語句條件表達式的類型只能是byte、short、int、char這四種類型,以及后加入的枚舉和string,並且要注意break的使用。
(2)、 If語句一般用於分支語句比較少的結構,而switch用於分支較多的結構。
(3)、如果判斷具體數值不多,而且符合byte、short、int、char這四種類型雖然兩個語句都可以使用,但建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型的判斷,使用if,if的使用范圍更廣。
二、循環結構語句
循環結構:循環語句可以在滿足循環條件的情況下,反復執行某一段代碼,這段被重復執行的代碼被稱為循環體語句,當反復執行這個循環體時,需要在合適的時候把循環判斷條件修改為false,從而結束循環,否則循環將一直執行下去,形成死循環。
1、for循環語句
for循環語句的基本語法格式:
for(初始化表達式;循環條件;操作表達式){
執行語句(循環體)
......
}
執行流程:
for(①;②;③){
④
}
第一步,執行①
第二步,執行②,如果判斷結果為true,執行第三步,如果判斷結果為false,執行第五步。
第三步,執行④
第四步,執行③,然后重復執行第二步。
第五步,退出循環。
代碼示例演示:
- public class Demo {
- public static void main(String[] args) {
- // 求1到100的和
- int sum = 0;
- for (int i = 1; i <= 100; i++) {
- sum += i;
- }
- System.out.println(sum);
- }
- }
運行結果為:
5050
簡單分析:要求1到100的和,首先要對1到100之間進行遍歷,還要定義一個變量記住相加的結果。所以,初始化int類型變量i等於1,從1開始遍歷,i滿足小於等於100,就執行循環體,即和sum相加,並把結果賦值給sum,然后i自增1,直到i大於100不滿足條件,就跳出循環,打印結果。
2、while循環語句
while循環語句的基本語法格式:
while(循環條件){
執行語句
}
while語句會反復的進行條件判斷,只要條件成立,{}內的執行語句就會被執行,直到條件不成立,while循環結束。
流程圖和for循環流程圖一樣。
代碼示例演示:
- public class Demo {
- public static void main(String[] args) {
- // 求1到100的和
- int i = 1, sum = 0;
- while (i <= 100) {
- sum += i;
- i++;
- }
- System.out.println(sum);
- }
- }
運行結果為:
5050
注意:要注意控制循環條件,避免陷入死循環。
無限循環的最簡單表達形式:while(true){}
3、do...while循環語句
do...while循環語句的基本語法格式:
do{
執行語句
}
while(循環條件);
關鍵字do后面{}中的執行語句是循環體。do while循環語句將循環條件放在了循環體的后面。這也就意味着,循環體會無條件執行一次,然后再根據循環條件決定是否繼續執行。
代碼示例演示:
- public class Demo {
- public static void main(String[] args) {
- // 求1到100的和
- int i = 1, sum = 0;
- do {
- sum += i;
- i++;
- } while (i <= 100);
- System.out.println(sum);
- }
- }
運行結果為:
5050
for循環、while循環和do...while循環的區別?
(1)、while和for首先要判斷循環條件,滿足條件才執行循環體,否則不執行循環體。do..while先執行循環體,無論條件是否滿足,都至少執行一次循環體。(do...while實際中用的較少)
(2)、for循環一般用於循環次數確定的,while,do..while用於循環次數不確定的。
(3)、for循環和while循環再多數情況下可以等價轉換,但還是有一點小區別的for循環結束,控制循環的變量會在內存中消失,提高內存的使用效率,而while循環結束,該變量則繼續存在,不會被回收。如果循環后面的代碼涉及到了該變量的使用,可以考慮使用while循環。
4、循環嵌套
循環嵌套是指在一個循環語句的循環體中再定義一個循環語句的語法結構。while、do..while、for循環語句都可以進行嵌套,並且它們之間也可以互相嵌套,如最常見的在for循環中嵌套for循環。語法格式如下:
for(初始化表達式;循環條件;操作表達式){
……
for(初始化表達式;循環條件;操作表達式){
執行語句
……
}
……
}
代碼示例演示:
- public class Demo {
- public static void main(String[] args) {
- // 打印如下圖形
- // 使用嵌套循環,通俗的講就是大圈套小圈。
- // *
- // **
- // ***
- // ****
- // *****
- // 尖朝上,可以改變條件,讓條件隨着外循環變化。
- for (int i = 1; i <= 5; i++) {//外循環控制行
- for (int j = 1; j <= i; j++) {//內循環控制每一行的列(個)數
- System.out.print("*");
- }
- System.out.println();// 只有一個功能就是換行。
- }
- // *****
- // ****
- // ***
- // **
- // *
- // 尖朝下,可以初始化值,讓初始化值隨着外循環變化。
- for (int i = 0; i < 5; i++) {
- for (int j = i; j < 5; j++) {
- System.out.print("*");
- }
- System.out.println();// 只有一個功能就是換行。
- }
- }
- }
5、跳轉語句
跳轉語句用於實現循環執行過程中程序流程的跳轉,在java中的跳轉語句有break語句和continue語句。
(1)、break語句
在switch條件語句和循環語句中都可以使用break語句。
當它出現在switch條件語句中時,作用是終止某個case並跳出switch結構。
當它出現在循環語句中,作用是跳出循環語句,執行后面的代碼。
(2)、continue語句
continue語句只能用在循環語句中,它的作用是終止本次循環,執行下一次循環。在while 和 do while語句中continue語句跳轉到循環條件處開始繼續執行,而在for語句中continue語句跳轉到迭代語句處開始繼續執行。
注意:
break和continue單獨存在時,下面不可以有任何語句,因為執行不到。
這兩個語句離開應用范圍,存在是沒有意義的。
break和continue都只對它所在的那層循環作用。
標簽的出現,可以讓這兩個語句作用於指定范圍。
代碼示例演示:
- public class Demo {
- public static void main(String[] args) {
- // 普通跳出循環
- for (int i = 1; i <= 10; i++) {
- if (i == 5) {// 當i=5就跳出循環
- break;
- }
- System.out.println("i=" + i);
- }
- // 輸出結果為
- // i=1
- // i=2
- // i=3
- // i=4
- // 如果要跳出指定的循環,可以使用語法提供的標簽語句來標識循環的位置,然后跳出標簽對應的循環。
- w: for (int x = 0; x < 3; x++)// w表示外層循環標記
- {
- for (int y = 0; y < 4; y++) {
- System.out.println("x=" + x);
- break w;// break跳出當前循環,加w標記表明跳出外循環
- }
- }
- // 輸出結果為
- // x=0
- // continue演示
- // 求1到10之間的偶數
- for (int x = 1; x <= 10; x++) {
- if (x % 2 == 1) {// 不是偶數
- continue;// 結束本次循環,繼續下一次循環
- }
- System.out.println("x=" + x);// 滿足偶數的數該句代碼不會執行,直接進入下一次循環
- }
- // 輸出結果為
- // x=2
- // x=4
- // x=6
- // x=8
- // x=10
- }
- }