Java基礎(chǔ)之流程控制

流程控制

兩種基本的流程控制結(jié)構(gòu):分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。其中分支結(jié)構(gòu)用于實(shí)現(xiàn)根據(jù)條件來(lái)選擇性地執(zhí)行某段代碼,循環(huán)結(jié)構(gòu)則用于實(shí)現(xiàn)根據(jù)循環(huán)條件重復(fù)執(zhí)行某段代碼。
這里是我的個(gè)人博客

分支結(jié)構(gòu)

if語(yǔ)句第一種格式:

if(關(guān)系表達(dá)式) {
    //語(yǔ)句體
}

執(zhí)行流程

1.首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false

2.如果是true就執(zhí)行語(yǔ)句體

3.如果是false就不執(zhí)行語(yǔ)句體

在這里插入圖片描述

代碼舉例

    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        if(a == b) {
            System.out.println("a == b");
        }
        
    }

if語(yǔ)句第二種格式

if(關(guān)系表達(dá)式) {
    //語(yǔ)句體1
} else {
    //語(yǔ)句體2
}

執(zhí)行流程

  1. 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
  2. 如果是true就執(zhí)行語(yǔ)句體1
  3. 如果是false就執(zhí)行語(yǔ)句體2
在這里插入圖片描述

代碼舉例

public static void main(String[] args) {
        int a = 3;
        int b = 4;
        if(a == b) {
            System.out.println("a == b");
        } else {
            System.out.println("a != b");
        }
        
    }

if語(yǔ)句第三種格式

if(關(guān)系表達(dá)式) {
    //語(yǔ)句體1
} else if(關(guān)系表達(dá)式2) {
    //語(yǔ)句體2
} 
...
} else if(關(guān)系表達(dá)式n) {
    //語(yǔ)句體n
}else {
    //語(yǔ)句體n + 1
}

執(zhí)行流程

  • 首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false

  • 如果是true就執(zhí)行語(yǔ)句體1

  • 如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false

  • 如果是true就執(zhí)行語(yǔ)句體2

  • 如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false

  • 如果沒有任何關(guān)系表達(dá)式為true,就執(zhí)行語(yǔ)句體n+1。

在這里插入圖片描述

代碼舉例

public static void main(String[] args) {
        int a = 3;
        int b = 4;
        if(a > b) {
            System.out.println("a > b");
        } else if(a < b){
            System.out.println("a > b");
        } else {
            System.out.println("a = b");
        }
    }

if語(yǔ)句和三元運(yùn)算符的互換

public static void main(String[] args) {
        //兩個(gè)數(shù)的最大值
        int a = 3;
        int b = 4;
        int max;
        if(a > b) {
            max = a;
        }  else {
            max = b;
        }
        
        int max1 =  (a > b) ? a : b;
        
    }

分支結(jié)構(gòu):switch

switch(表達(dá)式) {
    case  數(shù)值1:
        //語(yǔ)句體1
        break;
        
    case  數(shù)值2:
        //語(yǔ)句體2
        break;
        
    case  數(shù)值3:
        //語(yǔ)句體3
        break;
        ... 
    default : 
        //語(yǔ)句體;
        break;
}
//break:表示中斷,結(jié)束的意思。 
//default:表示所有的情況都不匹配的時(shí)候,就執(zhí)行語(yǔ)句體n+1。和if語(yǔ)句的else相似。

執(zhí)行流程:

  • 首先計(jì)算出表達(dá)式的值

  • 其次,和case依次比較,一旦有對(duì)應(yīng)的值,就會(huì)執(zhí)行相應(yīng)的語(yǔ)句,在執(zhí)行的過(guò)程中,遇到break就 會(huì)結(jié)束。

  • 最后,如果所有的case都和表達(dá)式的值不匹配,就會(huì)執(zhí)行default語(yǔ)句體部分,然后程序結(jié)束掉。

注意事項(xiàng):

switch(表達(dá)式)的數(shù)值類型是有限的,只能是四種基本數(shù)據(jù)類型和兩種引用數(shù)據(jù)類型。

四種基本數(shù)據(jù)類型:byte,short, int, char。

兩種引用數(shù)據(jù)類型:jdk5.0后支持枚舉,jdk7.0后支持字符串String。

default的位置和case的位置可以互換,不影響。

代碼舉例

public static void main(String[] args) {
        int a = 3;
        switch(a) {
        case 1:
            System.out.println("a = 1");
            break;
        case 2:
            System.out.println("a = 2");
            break;
        case 3:
            System.out.println("a = 3");
            break;
        default : 
            System.out.println("a 不等于 1,2,3");
            break;  
        }
    }
//輸出 a = 3 

case穿透性

在switch語(yǔ)句中,如果case的后面不寫break,將出現(xiàn)穿透現(xiàn)象,也就是一旦匹配成功,不會(huì)在判斷下一個(gè)case的值,直接向后運(yùn)行,直到遇到break或者整個(gè)switch語(yǔ)句結(jié)束,switch語(yǔ)句執(zhí)行終止。

public static void main(String[] args) {
        int a = 3;
        switch(a) {
            case 1:
                System.out.println("a = 1");
            break;
            case 2:
                System.out.println("a = 2");
            break;
            case 3:
                System.out.println("a = 3");
            case 4:
                System.out.println("a = 4");
            default : 
                System.out.println("a 不等于 1,2,3,4");
            break;  
        }
        
    }
//此時(shí)會(huì)輸入 
//a = 3 
//a = 4
//a 不等于 1,2,3,4    
     

循環(huán)結(jié)構(gòu)

? 循環(huán)語(yǔ)句可以在滿足循環(huán)條件的情況下,反復(fù)執(zhí)行某一段代碼,這段被重復(fù)執(zhí)行的代碼被稱為循環(huán)體語(yǔ)句,當(dāng)反復(fù)執(zhí)行這個(gè)循環(huán)體時(shí),需要在合適的時(shí)候把循環(huán)判斷條件修改為false,從而結(jié)束循環(huán),否則循 環(huán)將一直執(zhí)行下去,形成死循環(huán)。

for循環(huán):

格式:

for(初始化語(yǔ)句①; 循環(huán)條件語(yǔ)句②; 迭代語(yǔ)句③) {
    //循環(huán)體
}

執(zhí)行流程:

? 第一步:執(zhí)行初始化語(yǔ)句①,完成循環(huán)變量的初始化;

? 第二步:執(zhí)行循環(huán)條件語(yǔ)句②,看循環(huán)條件語(yǔ)句的值是true,還是false;

? 如果是true,執(zhí)行第三步;

? 如果是false,循環(huán)語(yǔ)句中止,循環(huán)不再執(zhí)行。

? 第三步:執(zhí)行循環(huán)體語(yǔ)句③

? 第四步:執(zhí)行迭代語(yǔ)句④,針對(duì)循環(huán)變量重新賦值

? 第五步:根據(jù)循環(huán)變量的新值,重新從第二步開始再執(zhí)行一遍

代碼舉例

public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println("1");
        }
    }

while循環(huán):

while語(yǔ)句標(biāo)準(zhǔn)格式:

while(條件語(yǔ)句①) {
    //循環(huán)語(yǔ)句體②    
}

執(zhí)行流程:

第一步:執(zhí)行循環(huán)條件語(yǔ)句①,看循環(huán)條件語(yǔ)句的值是true,還是false;

? 如果是true,執(zhí)行第二步;

? 如果是false,循環(huán)語(yǔ)句中止,循環(huán)不再執(zhí)行。

第二步:執(zhí)行循環(huán)體語(yǔ)句②;

第三步:循環(huán)體語(yǔ)句執(zhí)行完后,重新從第一步開始再執(zhí)行一遍

while擴(kuò)展格式:

初始化語(yǔ)句①;
while(條件語(yǔ)句②) {
    循環(huán)語(yǔ)句體   
    迭代語(yǔ)句③
}

do... while()

do...while()語(yǔ)句標(biāo)準(zhǔn)格式

do {
    循環(huán)體語(yǔ)句①;
} while (循環(huán)條件語(yǔ)句②);

執(zhí)行流程:

第一步:執(zhí)行循環(huán)體語(yǔ)句①;

第二步:執(zhí)行循環(huán)條件語(yǔ)句②,看循環(huán)條件語(yǔ)句的值是true,還是false;

? 如果是true,執(zhí)行第三步;

? 如果是false,循環(huán)語(yǔ)句終止,循環(huán)不再執(zhí)行。

第三步:循環(huán)條件語(yǔ)句執(zhí)行完后,重新從第一步開始再執(zhí)行一遍

do...while()語(yǔ)句擴(kuò)展格式

初始化語(yǔ)句①
do {
    循環(huán)體語(yǔ)句②;
    迭代語(yǔ)句③;
} while (循環(huán)條件語(yǔ)句④);

循環(huán)語(yǔ)句的區(qū)別

擴(kuò)展格式的區(qū)別(了解)

? 從循環(huán)次數(shù)角度分析

? do...while循環(huán)至少執(zhí)行一次循環(huán)體語(yǔ)句

? for和while循環(huán)先循環(huán)條件語(yǔ)句是否成立,然后決定是否執(zhí)行循環(huán)體,至少執(zhí)行零次循環(huán)體

語(yǔ)句

從循環(huán)變量的生命周期角度分析

? for循環(huán)的循環(huán)變量,在循環(huán)語(yǔ)句結(jié)束后,不可以被訪問(wèn);

? while和do...while循環(huán)的循環(huán)變量,是可以被繼續(xù)使用的;

標(biāo)準(zhǔn)格式的區(qū)別(理解):

遍歷有明顯的循環(huán)次數(shù)(范圍)的需求,選擇for循環(huán)

遍歷沒有明顯的循環(huán)次數(shù)(范圍)的需求,循環(huán)while循環(huán)

控制語(yǔ)句

break

使用場(chǎng)景:終止switch或者循環(huán)

? 在選擇結(jié)構(gòu)switch語(yǔ)句中

? 在循環(huán)語(yǔ)句中

? 離開使用場(chǎng)景的存在是沒有意義的

? break后面不可以寫任何語(yǔ)句。因?yàn)橛肋h(yuǎn)執(zhí)行不到。

continue

使用場(chǎng)景:結(jié)束本次循環(huán),繼續(xù)下一次的循環(huán)

continue后面不可以寫任何語(yǔ)句。因?yàn)橛肋h(yuǎn)執(zhí)行不到

return

使用場(chǎng)景:應(yīng)用在方法中,結(jié)束方法的

return后面不可以寫任何語(yǔ)句。因?yàn)橛肋h(yuǎn)執(zhí)行不到。

這里是我的個(gè)人博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前言 博主學(xué)習(xí)Java有段時(shí)間了,年后就要步入職業(yè)生涯,想著對(duì)這段時(shí)間學(xué)習(xí)到的知識(shí)點(diǎn)做些總結(jié),梳理下各個(gè)知識(shí)點(diǎn)...
    成逍閱讀 257評(píng)論 0 2
  • Swift 提供了類似 C 語(yǔ)言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的for和while循環(huán),基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 780評(píng)論 1 1
  • [The Swift Programming Language 中文版]本頁(yè)包含內(nèi)容: Swift提供了多種流程控...
    風(fēng)林山火閱讀 684評(píng)論 0 0
  • 有時(shí)候看著日子過(guò)的很慢,等回看的時(shí)候,在發(fā)現(xiàn)時(shí)間飛逝! 如果孩子不在身邊,溝通的頻率和可描述的孩子成長(zhǎng)過(guò)程會(huì)錯(cuò)過(guò)很...
    琴學(xué)舍閱讀 237評(píng)論 0 0

友情鏈接更多精彩內(nèi)容