從零開始復習Java-流程控制

Java流程控制

這一篇我想談一談Java中學過的基礎語法。從大一入學開始學C、C++,到現(xiàn)在大三下期,學了很多東西,但記憶最深刻的還是那個for循環(huán)的99乘法表、一開始接觸 cin 和 cout 的新鮮感覺。

還有在ACM校隊里天天腦子撓破寫題的日子,好多算法我現(xiàn)在都忘了怎么寫了,那可真是青春嗷。但青春一去就不復返了呀!

言歸正傳~

用戶交互的Scanner方法

在基本語法中,要實現(xiàn)程序和人的交互,需要用到Java給我們提供的工具類來獲取用戶的輸入。這個包是從Java5開始引入的。

package java.util.Scanner
    //基本語法
    Scanner s = new Scanner(System.in);
    String str = scanner.netLine();
    System.out.println(str);
  
    scanner.close();

如果是通過Scanner類的next()和nextLine()方法獲取輸入的字符串,在它讀取之前,我們需要使用hasNext()和hasNextLine()判斷是否還有輸入的數(shù)據(jù)。

屬于IO流的類如果不關閉會一直占用資源,要養(yǎng)成好習慣用完就關。

順序結(jié)構(gòu)

Java的基本結(jié)構(gòu)就是順序結(jié)構(gòu),即按照順序一句一句的向下執(zhí)行。它是最簡單的算法結(jié)構(gòu)

image-20200612141639447

在語句和語句之間,框與框之間是按從上到下都順序進行的,它是由若干個依次執(zhí)行的處理步驟組成的,甚至可以說,順序結(jié)構(gòu)是任何一種算法都離不開的基本算法結(jié)構(gòu)。

選擇結(jié)構(gòu)

  1. if單選擇結(jié)構(gòu)

    在場景中,我們需要判斷一個東西是否可行,然后我們再去執(zhí)行語句,這樣的一個過程在編程中用if語句來表示。

    image-20200612144947056
    if(布爾表達式){
        //語句
    }
    
  2. if雙選擇結(jié)構(gòu)

    需要用到兩個判斷語句,所以就引入了雙選擇結(jié)構(gòu),所以就有了if-else結(jié)構(gòu),又稱為if雙選擇結(jié)構(gòu)。

    image-20200612155712187
    if(布爾表達式){
        //為true時執(zhí)行該語句
    }else{
        //為false時執(zhí)行該語句
    }
    
  1. if多選擇結(jié)構(gòu)

    當存在區(qū)間多級判斷時,需要一個多選擇結(jié)構(gòu)來處理這類問題,即if-else if結(jié)構(gòu)。

    image-20200612162641997
    if(表達式a){
        //a為真執(zhí)行該語句
    }else if(表達式b){
        //b為真執(zhí)行該語句
    }else if(表達式c){
        //c為真執(zhí)行該語句
    }else {
        //a、b、c都為假則執(zhí)行該語句
    }
    

    在該結(jié)構(gòu)中,至多有1個else語句,必須在所有的else if語句之后;

    如果有一個else if 語句為true,其他的else if以及else語句直接跳過執(zhí)行。

  2. 嵌套的if結(jié)構(gòu)

    在if語句中嵌套使用另一個if或者else if 語句,這樣是合法的。

    if(語句a){
        //如果a為ture執(zhí)行代碼
        if(語句b){
            //如果b為true執(zhí)行代碼
        }
    }
    
  1. switch 多選擇結(jié)構(gòu)

    除了if-else if 之外,還有一個多選擇結(jié)構(gòu)實現(xiàn)方式,即switch case語句。

    用于判斷一個變量與一系列值中某個值是否匹配,每個值稱為一個分支。

    switch語句中的變量類型可以是byte short int 或者 char;從JavaSE 7開始,switch變量也支持了String類型,同時case標簽必須為字符串常亮或者字面量。并且可以有任意數(shù)量的case標簽 。

    如果對class文件進行反編譯,那么就會看到switch語句進行匹配的是字符串變量的hashCode,比如:

    //Java代碼
    String name = "barnes";
    switch(name){
            case"":
             sout;
             break;
            case"":
             sout;
             break;
         default:
             sout;
    }
    //class文件經(jīng)過idea反編譯后的代碼
    //String name = "barnes";
    //byte var3 = -1;
    //switch(name.hashCode()){
    //    case (hashCode):
    //        if (name.equals("xx")){
    //            var3 = 1;
    //        }
    //        break;
    //}
    

    然后對生成的var3進行switch判斷再輸出數(shù)據(jù)

    switch(expression){
         case 1:
            //代碼
            break;//可選   不加break可能造成case穿透,即從滿足條件的語句一路執(zhí)行到底部
         case 2:
            //代碼
            break;
         case 3:
            //代碼
            break;   
         default:
            //都不滿足時
    }
    

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

  1. while循環(huán)
    while(布爾表達式){
     //循環(huán)內(nèi)容
    }
    

    只要表達式值為true,循環(huán)就會一直執(zhí)行下去。同時,如果不符合條件則不能進入循環(huán),直接跳過。

    極少情況下需要循環(huán)一直執(zhí)行,比如服務器的請求響應監(jiān)聽;其他時候都應該有一個讓表達式失效的方式來結(jié)束循環(huán),在正常的編程過程中,應該盡量避免死循環(huán),而引起反應慢,或者崩潰。

  2. do-while循環(huán)
    do{
        //代碼語句
    }while(布爾表達式)
    

    和while循環(huán)用法相同,但有時候需要至少執(zhí)行一次,就需要用到do-while循環(huán)。

    while先判斷再執(zhí)行;do-while是先執(zhí)行后判斷,所以它的循環(huán)體至少會執(zhí)行一次,這是這兩個循環(huán)的主要差別

  3. for循環(huán)

    在c++里第一個接觸到的就是for循環(huán),所以這一塊還是挺好理解的。

    for(初始化;布爾表達式;更新){
        //代碼語句
    }
    

    for循環(huán)可以讓循環(huán)結(jié)構(gòu)變得更加簡單,它是支持迭代的一種結(jié)構(gòu),可以說是最有效,最靈活的循環(huán)結(jié)構(gòu)。同時在執(zhí)行前就確定了該循環(huán)執(zhí)行的次數(shù)。

    一個IDEA小技巧

    // 100.for
    // →for(int i = 0; i < 100; i++){
    //
    //}
    

    經(jīng)典九九乘法表

    image-20200613174534659
  1. 增強for循環(huán)

    在Java5中,新引入了一種用于數(shù)據(jù)或者集合的增強型for循環(huán)。

    for(聲明語句:表達式){
        //代碼塊
    }
    
    //聲明語句是聲明新的局部變量,這個變量的類型要和循環(huán)數(shù)組元素的類型相匹配。把作用域限制在循環(huán)體中。
    //表達式應該為數(shù)組名或者返回值為數(shù)組的一個方法名。
    

    學數(shù)據(jù)結(jié)構(gòu)的時候講到過,但確實沒怎么用過這個方法。好快速!每天復習都能重新?lián)煲稽c新東西,當然從側(cè)面印證了基礎不牢啊。

    例子:

    int[] num = {10,20,30,40,50};//定義數(shù)組
    
    for(int x:num){
        System.out.println(x);
    }
    
    image-20200613180005426

break&continue

break在所有循環(huán)語句的循環(huán)體中,都可以用break來中斷循環(huán)流程。需要強行退出循環(huán),不執(zhí)行剩下語句時,就可以加一個break

continue的作用是中止循環(huán)過程,但進行下一次是否執(zhí)行循環(huán)的判斷。它和break有一點像,但還要進行下一次循環(huán)是最大的差別。

goto這個東西呢,大一的時候?qū)W長對它鄙夷至極,說它經(jīng)常出問題,最好別用;goto雖然是Java的一個保留關鍵字,但現(xiàn)在在Java中是沒有g(shù)oto語句的,而我們從break和continue是可以看出goto殘留的一些特征的。

可以用break和continue加標簽實現(xiàn)goto功能,但實際上沒啥用處。

一個輸出101-150質(zhì)數(shù)的代碼,可以看到通過continue outer語句從內(nèi)部循環(huán)直接跳到外部循環(huán)(最好不要使用)

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

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