Java基礎(2)流程控制及關系運算符

  • 了解順序結構的相關概述
  • 掌握選擇結構之if語句相關知識點
  • 掌握選擇結構之switch語句相關知識點

1. 流程控制

1.1 概述

在一個程序執(zhí)行的過程中磅废,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y果是有直接影響的琢融。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時候要通過控制語句的執(zhí)行順序來實現(xiàn)我們想要的功能蜕窿。

例如: 某些代碼是滿足特定條件的情況下, 才會被執(zhí)行. 而有些代碼, 在滿足某些條件的情況下, 需要重復執(zhí)行, 這些, 都需要用到流程控制語句.

1.2 分類

  • 順序結構
  • 選擇結構(if語句, switch.case語句)
  • 循環(huán)結構(for循環(huán), while循環(huán), do.while循環(huán))

1.3 順序結構

概述

順序結構指的是代碼是按照從上往下, 從左往右的順序, 依次逐行執(zhí)行的, 且順序結構也是Java程序的默認結構.

圖解


需求

定義類OrderDemo01, 在類中定義main方法, 打印如下數(shù)據(jù):

//start
//HelloWorld1
//HelloWorld2
//HelloWorld3
//end

參考代碼

public class OrderDemo01 {
    public static void main(String[] args) {
        //打印指定的數(shù)據(jù)
        System.out.println("start");
        System.out.println("HelloWorld1");
        System.out.println("HelloWorld2");
        System.out.println("HelloWorld13");
        System.out.println("end");
    }
}

2. 選擇結構之if語句

2.1 概述

如果我們想某些代碼是在滿足條件的情況下, 才能被執(zhí)行, 此時就需要用到選擇結構了, 選擇結構也叫分支結構, 主要分為以下兩種:

  • if語句
  • switch.case語句

2.2 分類

if語句一般用于范圍的判斷, 例如: 如果當前時間是0~8點, 小黑就和你說: 早上好, 如果當前時間是9 ~12點, 小黑就和你說: 中午好. 根據(jù)應用場景的不同(即: 分支個數(shù)不同), if語句的格式主要分為以下三種:

  1. if語句(也叫: 單分支)
  2. if.else語句(也叫: 雙分支)
  3. if.else if語句(也叫: 多分支)

2.3 單分支

單分支結構一般用來判斷一種情況, 格式如下:

格式

if(關系表達式) {
    //語句體;
}

執(zhí)行流程

  1. 先執(zhí)行關系表達式, 看其結果是true還是false.
  2. 如果是true, 則執(zhí)行大括號中的語句體.
  3. 如果是false, 則大括號中的語句體不執(zhí)行.

圖解


需求

定義變量time表示時間, 如果它的范圍是在[0,8]之間, 就打印早上好, 否則不操作.

解釋: [0, 8], 意思是說 0~8之間, 包含0, 也包含8, 這種寫法屬于"前閉后閉".

[0, 8), 意思是: 0~8之間, 包含0, 不包含8, 這種寫法屬于"前閉后開", 也叫: 包左不包右.

參考代碼

public class IfDemo01 {
    public static void main(String[] args) {
        int time = 5;
        if(time >= 0 && time <= 8) {
            System.out.println("早上好");
        }
    }
}

2.4 雙分支

雙分支結構指的是if. else語句, 一般用來判斷兩種情況, 格式如下:

2.4.1 格式
if(關系表達式) { //if的意思: 如果
    //語句體1;
} else {       //否則...
    //語句體2;
}
2.4.2 執(zhí)行流程
  1. 先執(zhí)行關系表達式, 看其結果是true還是false.
  2. 如果是true, 則執(zhí)行語句體1.
  3. 如果是false, 則執(zhí)行語句體2.
2.4.3 圖解
2.4.5 案例一: if格式二入門

需求

定義變量time表示時間, 如果它的范圍是在0~8之間, 就打印早上好, 否則就打印中午好.

參考代碼

public class IfDemo02 {
    public static void main(String[] args) {
        int time = 5;
        if(time >= 0 && time <= 8) {
            System.out.println("早上好");
        } else {
            System.out.println("中午好");
        }
    }
}
2.4.6 案例二: 判斷奇偶數(shù)

需求

  1. 提示用戶鍵盤錄入一個數(shù)據(jù)并接收.
  2. 判斷該數(shù)據(jù)是奇數(shù)還是偶數(shù), 并將結果打印到控制臺上.

參考代碼

public class IfDemo03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個整數(shù): ");
        int num = sc.nextInt();
        if (num % 2 == 0) {
            System.out.println(num + "是偶數(shù)");
        } else {
            System.out.println(num + "是奇數(shù)");
        }
    }
}

記憶

  1. if語句控制的語句體如果只有一行代碼, 則該大括號可以省略不寫.

    例如:

    if(5 > 3)

    ? System.out.println("夯哥最純潔!");

  2. if語句控制的語句體如果只有一行代碼, 則該大括號可以省略不寫, 定義變量的語法除外.

    例如:

    if(5 > 3)

    int a = 10; //這樣寫會報錯, jvm會識別這樣代碼為兩行: int a; a = 10;

    上述的代碼就相當于:

    if(5 > 3) {

    ? int a;

    }

    a = 10; //這樣寫肯定會報錯.

  3. 你省略if后邊的大括號時, 有個問題一定要注意, 不要亂寫分號.

    例如:

    if(5 > 3) ; //這里如果寫分號了, 就意味著if語句結束了.

    System.out.println("本意: 這行代碼只有條件成立才會被執(zhí)行");

2.5 多分支

多分支結構指的是if. else if語句, 一般用來判斷多種情況, 格式如下:

2.5.1 格式
if(關系表達式1) {
    //語句體1;
} else if(關系表達式2){
    //語句體2;
} else if(關系表達式3){  //這里可以根據(jù)需求, 有多個else if語句
    //語句體3;
} else {
    //語句體n;
}
2.4.2 執(zhí)行流程
  1. 先執(zhí)行關系表達式1, 看其結果是true還是false.
  2. 如果是true, 則執(zhí)行語句體1, 整個if語句結束.
  3. 如果是false, 則判斷關系表達式2, 看其結果是true還是false.
  4. 如果是true, 則執(zhí)行語句體2, 整個if語句結束.
  5. 如果是false, 則判斷關系表達式3, ...以此類推.
  6. 如果所有的關系表達式都不成立, 則執(zhí)行else語句的語句體n, 整個if語句結束.
2.4.3 圖解
2.4.4 案例一: 打印星期

需求

  1. 提示用戶錄入[1, 7]之間的數(shù)字, 并接收.
  2. 根據(jù)用戶錄入的數(shù)字, 打印對應的星期, 格式如下:
    • 用戶錄入1, 打印"星期一"
    • 用戶錄入2, 打印"星期二"
    • ...以此類推
    • 用戶錄入非法數(shù)字, 打印"沒有這樣的日期"

參考代碼

import java.util.Scanner;

public class IfDemo04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個1 - 7之間的整數(shù): ");
        int week = sc.nextInt();
        if (week == 1) {
        } else if(week == 2) {
            System.out.println("星期二");
        } else if(week == 3) {
            System.out.println("星期三");
        } else if(week == 4) {
            System.out.println("星期四");
        } else if(week == 5) {
            System.out.println("星期五");
        } else if(week == 6) {
            System.out.println("星期六");
        } else if(week == 7) {
            System.out.println("星期日");
        } else {
            System.out.println("沒有這樣的日期, 你是從火星來的吧!");
        }
    }
}
2.4.5 案例二: 發(fā)放獎勵

需求

  1. 小明快要期末考試了娩嚼,小明爸爸對他說,會根據(jù)他的考試成績萨螺,送他不同的禮物.
  2. 假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物愧驱,并在控制臺輸出慰技。
  3. 禮物標準如下:
    • 95~100 山地自行車一輛
    • 90~94 游樂場玩一次
    • 80~89 變形金剛玩具一個
    • 80以下 胖揍一頓

參考代碼

import java.util.Scanner;

public class IfDemo05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入小明的考試成績: ");
        int score = sc.nextInt();
        if (score >= 95 && score <= 100) {
            System.out.println("獎勵小明: 山地自行車一輛");
        } else if(score >= 90 && score < 95) {
            System.out.println("獎勵小明: 游樂場玩兒一次");
        } else if(score >= 80 && score < 90) {
            System.out.println("獎勵小明: 變形金剛玩具一個");
        } else if(score >= 0 && score < 80){
            System.out.println("獎勵小明: 男女雙混組合拳 + 掃帚棒法");
        } else {
            System.out.println("考試成績錄入有誤.");
        }
    }
}
2.4.6 案例三: 獲取最大值

需求

  1. 提示用戶錄入3個整數(shù), 并接收.
  2. 通過if語句獲取這三個整數(shù)的最大值.
  3. 將結果打印到控制臺上.

參考代碼

import java.util.Scanner;

public class IfDemo06 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入第一個整數(shù): ");
        int a = sc.nextInt();
        System.out.println("請錄入第二個整數(shù): ");
        int b = sc.nextInt();
        System.out.println("請錄入第三個整數(shù): ");
        int c = sc.nextInt();

        //方式一: if嵌套實現(xiàn).
        int max = a;
        int max2 = a;
        if (a > b) {
            if (a > c) {
                max = a;
            } else {
                max = c;
            }
        } else {
            if(b > c) {
                max = b;
            } else {
                max = c;
            }
        }
        System.out.println("最大值: " + max);
        //方式二: if. else.if語句實現(xiàn)
        if (a > b && a > c) {
            max2 = a;
        } else if(b > a && b > c) {
            max2 = b;
        } else {
            max2 = c;
        }
        System.out.println("最大值: " + max2);
    }
}

3. 選擇結構之switch語句

3.1 概述

switch語句, 一般是用于做固定值判斷的, 在實際開發(fā)中, 用到的頻率也非常高, 所以也是要求大家掌握的知識點.

3.2 格式

switch(表達式) {
    case 值1:    
        語句體1;
        break;
    case 值2:
        語句體2;
        break;
    case 值3:
        語句體3;
        break;
    ...    //根據(jù)需求, 可以寫多組case.
    default:    
        語句體n;
        break;
}

3.4 格式詳解

1582129149773.png

3.5 執(zhí)行流程

  1. 先計算表達式的值, 然后按照從上往下的順序依次和每一個case對應的值相匹配.

  2. 如果能匹配成功, 則執(zhí)行該case對應的語句體, 然后執(zhí)行break, 至此, 整個switch語句結束.

  3. 如果和所有的case值都不匹配, 則執(zhí)行default對應的語句體, 然后執(zhí)行break, 至此, 整個switch語句結束.

    解釋: default語句就類似于if. else語句中的else, 當所有條件都不滿足時才會執(zhí)行.

3.6 執(zhí)行流程圖解

1582129267435.png

3.7 示例一: 春夏秋冬

需求

  1. 一年有12個月, 分屬于春夏秋冬4個季節(jié), 鍵盤錄入一個月份, 請用程序?qū)崿F(xiàn)判斷該月份屬于哪個季節(jié), 并輸出。
  2. 具體標準如下:
    • 輸入: 1吻商、2糟红、12 輸出:冬季
    • 輸入: 3、4盆偿、5 輸出:春季
    • 輸入: 6、7捎稚、8 輸出:夏季
    • 輸入: 9、10句旱、11 輸出:秋季
    • 輸入:其它數(shù)字 輸出:數(shù)字有誤

參考代碼

import java.util.Scanner;

public class SwitchDemo07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個月份: ");
        int month = sc.nextInt();
        switch (month) {
            case 12:
                System.out.println("冬季");
                break;
            case 1:
                System.out.println("冬季");
                break;
            case 2:
                System.out.println("冬季");
                break;
            case 3:
                System.out.println("春季");
                break;
            case 4:
                System.out.println("春季");
                break;
            case 5:
                System.out.println("春季");
                break;
            case 6:
                System.out.println("夏季");
                break;
            case 7:
                System.out.println("夏季");
                break;
            case 8:
                System.out.println("夏季");
                break;
            case 9:
                System.out.println("秋季");
                break;
            case 10:
                System.out.println("秋季");
                break;
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("沒有這樣的日期");
                break;
        }
    }
}

3.8 case穿透

概述

在switch語句中,如果case的后面不寫break腥泥,將出現(xiàn)case穿透現(xiàn)象蛔外,也就是不會在判斷下一個case的值,直接向后運行豹爹,直到遇到break臂聋,或者整體switch結束孩等。

格式

switch(表達式) {
    case 值1:    
        語句體1;   //假設表達式的值 = 值1, 則執(zhí)行完語句體1后, 不會判斷第二個case, 直接執(zhí)行語句體2;
        break;
    case 值2:
        語句體2;
        break;
    case 值3:
        語句體3;
        break;
    ...    //根據(jù)需求, 可以寫多組case.
    default:    
        語句體n;
        break;
}

需求
通過case穿透, 優(yōu)化剛才的春夏秋冬案例.

參考代碼

import java.util.Scanner;

public class SwitchDemo08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個月份: ");
        int month = sc.nextInt();
        switch (month) {
            case 12:
            case 1:
            case 2:
                System.out.println("冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("沒有這樣的日期");
                break;
        }
    }
}

3.9 思考題

  1. switch語句的小括號中, 可以放什么?
  2. default語句必須放到switch語句的最后嗎?
  3. break關鍵字可以省略嗎? 對執(zhí)行結果是否有影響?

3.10 案例二: 發(fā)放獎勵

需求

  1. 小明快要期末考試了肄方,小明爸爸對他說权她,會根據(jù)他的考試成績隅要,送他不同的禮物.
  2. 假如你可以控制小明的得分拾徙,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物感局,并在控制臺輸出询微。
  3. 禮物標準如下:
    • 90~100 山地自行車一輛
    • 80~89 游樂場玩一次
    • 70~79 變形金剛玩具一個
    • 70以下 胖揍一頓

參考代碼

import java.util.Scanner;

public class SwitchDemo09 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入小明的考試成績: ");
        int score = sc.nextInt();
        if (score >= 0 && score <= 100) {
            //合法成績
            switch (score / 10) {
                case 10:
                case 9:
                    System.out.println("獎勵小明: 山地自行車一輛");
                    break;
                case 8:
                    System.out.println("獎勵小明: 游樂場玩兒一次");
                    break;
                case 7:
                    System.out.println("獎勵小明: 變形金剛玩具一個");
                    break;
                default:
                    System.out.println("獎勵小明: 男女雙混組合拳 + 掃帚棒法");
                    break;
            }
        } else {
            //非法成績
            System.out.println("您錄入的成績有誤!");
        }
    }
}

4 練習題

4.1 案例一: 漲工資.

需求

  1. 根據(jù)工齡(整數(shù))給員工漲工資(整數(shù)), 工齡和基本工資通過鍵盤錄入

  2. 漲工資的條件如下:

    • [10-15) +5000
    • [5-10) +2500
    • [3~5) +1000
    • [1~3) +500
    • [0~1) +200
  3. 打印格式如下:

    您目前工作了10年撑毛,基本工資為 3000元, 應漲工資 5000元,漲后工資 8000元

參考代碼

public static void main(String[] args) {
    // 1.創(chuàng)建鍵盤錄入對象
        Scanner sc = new Scanner(System.in);
        // 2.定義變量age表示工齡(假設為int類型)藻雌,定義變量salary表示基本工資(假設為int類型)
//      int age,salary;
        // 3.通過鍵盤錄入給工齡age賦值和基本工資salary賦值
//      age = sc.nextInt();
//      salary = sc.nextInt();
        int age = sc.nextInt();
        int salary = sc.nextInt();
        int addSalary = 0;
        // 4.對工齡進行邏輯判斷胯杭,根據(jù)不同的工齡區(qū)間受啥,進行漲工資salary+=n;(n表示:漲工資的數(shù)量)
        if(age>=15||age<0) {
            System.out.println("您輸入的工齡不合法~");
            return ;
        }
        //[10-15)     +5000
        if(age>=10&&age<15) {
            addSalary = 5000;
        } else if(age>=5&&age<10){//[5-10)      +2500
            addSalary = 2500;
        } else if(age>=3&&age<5) {//[3~5)       +1000
            addSalary = 1000;
        } else if(age>=1&&age<3) {//[1~3)       +500
            addSalary = 500;
        } else if(age>=0&&age<1) {//[0~1)       +200
            addSalary = 200;
        }               
        // 5.按照格式進行打印
        System.out.println("您目前工作了"+age+"年顽频,基本工資為 "+salary+"元, 應漲工資 "+addSalary+"元,漲后工資 "+(salary+addSalary)+"元");
}

4.2 案例二: 定義計算器

  • 需求:

    1.功能描述:模擬計算器功能糯景,對鍵盤錄入的兩個int類型的數(shù)據(jù)進行加蟀淮、減冀宴、乘略贮、除的運算逃延,并打印運算結果

    2.要求:

    (1)鍵盤錄入三個整數(shù),其中前兩個整數(shù)代表參加運算的數(shù)據(jù)揽祥,
    
      第三個整數(shù)為要進行的運算(0:表示加法運算,1:表示減法運算,2:表示乘法運算,3:表示除法運算)
    
    (2)使用今天所學知識完成功能
    
    (3)演示格式如下:
    
      請輸入第一個整數(shù):30
    
      請輸入第二個整數(shù):40
    
      請輸入您要進行的運算(0:表示加法運算,1:表示減法運算,2:表示乘法運算,3:表示除法運算):0
    
      控制臺輸出:30+40=70
    
  • 實現(xiàn)步驟:

  • 代碼:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入第一個數(shù)據(jù)");
        int a = sc.nextInt();
        System.out.println("請輸入第二個數(shù)據(jù)");
        int b = sc.nextInt();
        System.out.println("請輸入您要進行的運算(0:表示加法運算,1:表示減法運算,2:表示乘法運算,3:表示除法運算):");
        int type = sc.nextInt();
        //定義變量用于接收結果
        double result = 0;
        switch(type) {
            case 0://做加法
                result = a + b;
                System.out.println(a+"+"+b+"="+result);
                break;
            case 1:
                result = a - b;
                System.out.println(a+"-"+b+"="+result);
                break;
            case 2:
                result = a * b;
                System.out.println(a+"*"+b+"="+result);
                break;
            case 3:
                result = a / (b + 0.0);
                System.out.println(a+"/"+b+"="+result);
                break;
            default:
                System.out.println("您輸入有誤");
        }
    }

4.3 案例三: 水仙花數(shù)

  • 需求:

    鍵盤錄入一個三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?

    水仙花數(shù)字要求: 指的是一個三位數(shù)拄丰,個位料按、十位载矿、百位的數(shù)字立方和等于原數(shù)

    例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153

  • 實現(xiàn)步驟:

    1.創(chuàng)建鍵盤錄入對象

    2.獲取一個int數(shù)字

    3.獲取個位,十位,百位

    4.求個位,十位,百位的立方和

    5.利用if語句判斷立方和是否等于該數(shù)字本身,并輸出結果

  • 代碼實現(xiàn):

public static void main(String[] args) {
    //1.創(chuàng)建鍵盤錄入對象
    Scanner sc = new Scanner(System.in);
    //2.獲取一個int數(shù)字
    System.out.println("請輸入一個三位整數(shù)");
    int num = sc.nextInt();
        
    //3.獲取個位,十位,百位
    int ge = num%10;
    int shi = num/10%10;
    int bai = num/100%10;
    //4.求個位,十位,百位的立方和
    int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
        
    //5.利用if語句判斷立方和是否等于該數(shù)字本身,并輸出結果
    if(sum == num) {
        System.out.println(num+"是水仙花數(shù)字 ");
    } else {
        System.out.println(num+"不是水仙花數(shù)字 ");
    }
}

今日目標

  • 掌握運算符的用法
  • 掌握鍵盤錄入功能
  • 獨立完成IDEA的安裝和配置
  • 掌握紙牌案例

1. 關系運算符

1.1 概述

關系運算符就是用來描述兩個變量或者常量之間的關系的.主要分為以下6種:

符號 說明
== a==b闷盔,判斷a和b的值是否相等逢勾,成立為true敏沉,不成立為false
!= a!=b,判斷a和b的值是否不相等潦闲,成立為true迫皱,不成立為false
> a>b卓起,判斷a是否大于b戏阅,成立為true奕筐,不成立為false
>= a>=b离赫,判斷a是否大于等于b渊胸,成立為true翎猛,不成立為false
< a<b切厘,判斷a是否小于b,成立為true,不成立為false
<= a<=b而克,判斷a是否小于等于b员萍,成立為true碎绎,不成立為false

1.2 注意事項

  • 關系運算符的結果都是boolean類型筋帖,要么是true日麸,要么是false代箭。
  • 千萬不要把==寫成了=, 否則結果可能不是你想要的.

1.3 案例

需求

  1. 定義兩個int類型的變量a和b, 分別賦值為10和5.
  2. 通過關系運算符比較這兩個變量之間的關系, 并打印結果.

參考代碼

public class OperatorDemo01 {
    public static void main(String[] args) {
        //定義兩個int類型的變量a和b, 分別賦值為10和5.
        int a = 10;
        int b = 5;
        //通過`關系運算符`比較這兩個變量之間的關系, 并打印結果.
        System.out.println(a > b);
        System.out.println(5 >= 5);
        System.out.println(a < b);
        System.out.println(5 <= 5);
        System.out.println(a != b);
        System.out.println(a == b);
        System.out.println(a = b);
        
        //關系運算符的最終結果是boolean類型, 所以我們也可以用boolean類型的變量接收.
        boolean flag = 10 < 5;
        System.out.println(flag);
    }
}

2. 邏輯運算符

2.1 概述

  • 邏輯運算符是用來判斷并且, 或者, 除非等邏輯關系的符號.

  • 該符號兩端一般連接值為布爾類型的關系表達式

    例如: 某企業(yè)招工, 要求年齡必須在 20 ~ 65歲之間.

2.2 分類

注意: 假設下表中的a和b, 都是boolean類型的值.

符號 作用 說明
& 邏輯與 a&b嗡综,并且的意思. 有false則整體為false, 都為true, 則整體為true.
| 邏輯或 a|b极景,或者的意思, 有true則整體為true, 都為false, 則整體為false.
! 邏輯非 !a戴陡,取反的意思, 以前為true, 取反后為false, 以前為false, 取反后為true.
^ 邏輯異或 a^b恤批,異同的意思, 相同為false, 不同為true.

小技巧:

對一個布爾數(shù)據(jù), 偶數(shù)次取反, 該數(shù)據(jù)值不變.

!true = false

2.3 示例: 邏輯運算符入門

需求

  1. 定義三個int類型的變量a, b, c, 它們的初始化值分別為10, 20, 30.
  2. 通過上述的三個變量, 演示各個邏輯運算符.

參考代碼

public class OperatorDemo02 {
    public static void main(String[] args) {
        int a = 10, b = 20, c = 30;
        //&: 邏輯與, 并且的意思, 有false則整體為false.
        //相當于: 班長找女朋友, 要求長得漂亮, 并且身材好.
        System.out.println((a > b) & (a > c)); //false & false
        System.out.println((a < b) & (a > c)); //true & false
        System.out.println((a > b) & (a < c)); //false & true
        System.out.println((a < b) & (a < c)); //true & true
        System.out.println("-----------------");

        //|: 邏輯或, 或者的意思, 有true則整體為true.
        //相當于: 降低條件了, 要么長得漂亮, 要么身材好.
        System.out.println((a > b) | (a > c)); //false | false
        System.out.println((a < b) | (a > c)); //true | false
        System.out.println((a > b) | (a < c)); //false | true
        System.out.println((a < b) | (a < c)); //true | true
        System.out.println("-----------------");

        //!: 邏輯非, 取反的意思
        //相當于: 只要不是男的就行.
        System.out.println(!(a > b));   //!false
        System.out.println(!(a < b));   //!true
        System.out.println("-----------------");

        //邏輯異或, 異同的意思, 相同為false, 不同為true.
        //相當于: 最后還是找了個男的, 但是領不了證.
        //法律規(guī)定: 一夫一妻, 一男一女, 必須是異性才能領證.
        System.out.println((a > b) ^ (a > c)); //false ^ false
        System.out.println((a < b) ^ (a > c)); //true ^ false
        System.out.println((a > b) ^ (a < c)); //false ^ true
        System.out.println((a < b) ^ (a < c)); //true ^ true
    }
}

2.4 短路邏輯運算符

在實際開發(fā)中, 并且, 或者這樣的操作是非常多的, 但是上述的&(邏輯與), !(邏輯或)運算符沒有短路效應, 所以效率相對較低, 針對這種情況, 我們可以使用&&(短路與), ||(短路或)來優(yōu)化.

2.4.1 格式
符號 作用 說明
&& 短路與 作用和&相同诀浪,但是有短路效果, 前邊出現(xiàn)false, 后邊不執(zhí)行.
|| 短路或 作用和|相同雷猪,但是有短路效果, 前邊出現(xiàn)true, 后邊不執(zhí)行.
2.4.2 解釋
  • 短路與運算中求摇,只要有一個表達式的值為false与境,那么結果就可以判定為false了摔刁,沒有必要將所有表達式的值都計算出來共屈,短路與運算符就有這樣的效果拗引,可以提高效率寺擂。
  • 同理在短路或運算中怔软,一旦發(fā)現(xiàn)值為true,右邊的表達式將不再參與運算括改。
2.4.3 短路和非短路之間的區(qū)別
  • 邏輯與 和 短路與之間的區(qū)別

    • 邏輯與&(也叫單與): 無論左邊真假,右邊都要執(zhí)行虱疏。
    • 短路與&&(也叫雙與): 如果左邊為真做瞪,右邊執(zhí)行装蓬;如果左邊為假牍帚,右邊不執(zhí)行暗赶。
  • 邏輯或 和 短路或之間的區(qū)別

    • 邏輯或|(也叫單或): 無論左邊真假蹂随,右邊都要執(zhí)行糙及。
    • 短路或||(也叫雙或): 如果左邊為假浸锨,右邊執(zhí)行柱搜;如果左邊為真聪蘸,右邊不執(zhí)行健爬。
  • 記憶: 在實際開發(fā)中, 我們用的最多的邏輯運算符就是: &&, ||, !

2.4.4 案例

需求

參考代碼

public class OperatorDemo03 {
    public static void main(String[] args) {
        //1. 定義兩個int類型的變量a和b, 初始化值分別為: 2, 5
        int a = 2, b = 5;
        //2. 演示邏輯與(&)
       /* System.out.println((a++ > 2) & (b++ < 7)); //兩個表達式都會執(zhí)行.
        System.out.println(a);
        System.out.println(b);*/
        System.out.println("------------------");

        //3. 演示短路與(&&)
        System.out.println((a++ > 2) && (b++ < 7)); //左邊表達式結果為false, 右邊不執(zhí)行.
        System.out.println(a);
        System.out.println(b);
    }
}

3. 三元運算符

3.1 格式

三元運算符也叫三目運算符娜遵,即由三部分組成设拟,格式如下:

(關系表達式) ? 表達式1:表達式2纳胧; 

3.2 執(zhí)行流程

  1. 先執(zhí)行關系表達式, 看其結果是true還是false.
  2. 如果是true, 則執(zhí)行表達式1
  3. 如果是false, 則執(zhí)行表達式2

3.3 案例一: 入門案例

需求

  1. 定義兩個int類型的變量a. b, 初始化值分別為10, 20
  2. 通過三元運算符, 獲取變量a和b的最大值.
  3. 將結果(最大值)打印到控制臺上.

參考代碼

public class OperatorDemo04 {
    public static void main(String[] args) {
        //1. 定義兩個int類型的變量a. b, 初始化值分別為10, 20
        int a = 10, b = 20;
        //2. 通過三元運算符, 獲取變量a和b的最大值.
        int max = a < b ? b : a;
        //3. 將結果(最大值)打印到控制臺上.
        System.out.println(max);
    }
}

3.4 案例二: 判斷老虎體重

需求

動物園里有兩只老虎万皿,已知兩只老虎的體重分別為180kg相寇、200kg唤衫,請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是否相同佳励。

參考代碼

public class OperatorDemo05 {
    public static void main(String[] args) {
        //1:定義兩個變量用于保存老虎的體重赃承,單位為kg瞧剖,這里僅僅體現(xiàn)數(shù)值即可抓于。
        int weight1 = 180;
        int weight2 = 200;
        //2:用三元運算符實現(xiàn)老虎體重的判斷捉撮,體重相同巾遭,返回true灼舍,否則片仿,返回false砂豌。
        boolean flag = weight1 == weight2 ? true : false;
        //3:輸出結果
        System.out.println("flag:" + flag);
    }
}

3.5 案例三: 獲取和尚的最高身高

需求

  1. 一座寺廟里住著三個和尚阳距,已知他們的身高分別為150cm筐摘、210cm咖熟、165cm.

  2. 請用程序?qū)崿F(xiàn)獲取這三個和尚的最高身高馍管。

參考代碼

public class OperatorDemo06 {
    public static void main(String[] args) {
        //1:定義三個變量用于保存和尚的身高确沸,單位為cm罗捎,這里僅僅體現(xiàn)數(shù)值即可桨菜。
        int h1 = 150;
        int h2 = 210;
        int h3 = 165;
        //2:用三元運算符獲取前兩個和尚的較高身高值替蔬,并用臨時身高變量保存起來承桥。
        int temp = h1 > h2 ? h1 : h2;
        //3:用三元運算符獲取臨時身高值和第三個和尚身高較高值凶异,并用最大身高變量保存剩彬。
        int max = temp > h3 ? temp : h3;
        //4:輸出結果
        System.out.println("這三個和尚中身高最高的是:" + max +"cm");
    }
}

4. 鍵盤錄入

4.1 概述

之前我們涉及到的數(shù)據(jù)都是寫死的, 固定的數(shù)據(jù), 這樣做用戶體驗并不好, 我們就想著, 能不能讓用戶錄入數(shù)據(jù), 我們通過特定的代碼來接收, 這樣做就非常好玩兒了, 針對于這種情況, 我們可以通過鍵盤錄入來實現(xiàn).

即: Java中鍵盤錄入功能指的就是Scanner類, 我們可以通過它的一些方法, 來獲取用戶錄入的數(shù)據(jù).

4.2 使用步驟

  1. 導包. 包就是文件夾.

    注意:

    • Scanner類是java.util包下的類, 使用之前必須要先導包.

    • 導包的語句是定義在類的上面的, 格式如下:

      import java.util.Scanner;
      
  2. 創(chuàng)建Scanner類的對象, 格式為:

    //暫時先理解為固定格式, 也就是必須這么寫.
    Scanner sc = new Scanner(System.in);
    
  3. 通過Scanner類的nextInt()方法接收用戶錄入的數(shù)據(jù).

    int a = sc.nextInt();
    

4.3 案例一: Scanner入門

需求

  1. 提示用戶錄入他/她的年齡.
  2. 通過鍵盤錄入功能, 接收用戶錄入的年齡.
  3. 將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺上.

參考代碼

//導包
import java.util.Scanner;

public class ScannerDemo01 {
    public static void main(String[] args) {
        //1. 提示用戶錄入他/她的年齡.
        System.out.println("請錄入您的年齡: ");
        //2. 通過鍵盤錄入功能, 接收用戶錄入的年齡.
        Scanner sc = new Scanner(System.in);
        int age = sc.nextInt();
        //3. 將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺上.
        System.out.println("age: " + age);
    }
}

4.4 案例二: 鍵盤錄入版和尚身高

需求

  1. 提示用戶錄入第一個和尚的身高, 并接收
  2. 提示用戶錄入第二個和尚的身高, 并接收
  3. 提示用戶錄入第三個和尚的身高, 并接收.
  4. 通過三元運算符, 獲取三個和尚中身高最矮的那個和尚的身高.
  5. 將結果(最低身高)打印到控制臺上.

參考代碼

import java.util.Scanner;

public class ScannerDemo02 {
    public static void main(String[] args) {
        //身高未知,采用鍵盤錄入實現(xiàn)轻黑。首先導包氓鄙,然后創(chuàng)建對象抖拦。
        Scanner sc = new Scanner(System.in);
        //鍵盤錄入三個身高分別賦值給三個變量态罪。
        System.out.println("請輸入第一個和尚的身高:");
        int h1 = sc.nextInt();
        System.out.println("請輸入第二個和尚的身高:");
        int h2 = sc.nextInt();
        System.out.println("請輸入第三個和尚的身高:");
        int h3 = sc.nextInt();
        //用三元運算符獲取前兩個和尚的較低身高值,并用臨時身高變量保存起來券膀。
        int temp = h1 < h2 ? h1 : h2;
        //用三元運算符獲取臨時身高值和第三個和尚身高較低值芹彬,并用最低身高變量保存舒帮。
        int min = temp < h3 ? temp : h3;
        //輸出結果玩郊。
        System.out.println("這三個和尚中身高最低的是:" + min +"cm");
    }
}

IDEA常用快捷鍵

快捷鍵 功能
Alt+Enter 導入包译红,自動修正代碼
Ctrl+Y 刪除光標所在行
Ctrl+D 復制光標所在行的內(nèi)容耻陕,插入光標位置下面
Ctrl+Alt+L 格式化代碼
Ctrl+/ 單行注釋
Ctrl+Shift+/ 選中代碼注釋诗宣,多行注釋召庞,再按取消注釋
Alt+Shift+上下箭頭 移動當前代碼行

4.1 練習1

需求:

    小明左篮灼、右手中分別拿兩張紙牌(比如:黑桃10和紅桃8穿稳,數(shù)字10和8可通過鍵盤錄入),要求編寫代碼交換小明手中的牌

運行效果:

請輸入小明左手中的紙牌:10
請輸入小明右手中的紙牌:8

互換前小明手中的紙牌:
左手中的紙牌:10
右手中的紙牌:8

互換后小明手中的紙牌:
左手中的紙牌:8
右手中的紙牌:10
實現(xiàn)步驟:
1.創(chuàng)建鍵盤錄入對象
2.定義int類型的變量left和right它改,并通過nextInt()方法給left和right賦值
3.定義臨時變量temp實現(xiàn)left和right變量值得交換
4.按格式打印交換后的結果
代碼實現(xiàn):
public class Task01 {
    public static void main(String[] args) {        
        //創(chuàng)建鍵盤錄入對象
        Scanner sc = new Scanner(System.in);
        //錄入左手中的紙牌數(shù)字
        System.out.print("請輸入小明左手中的紙牌:");
        int left = sc.nextInt();
        //錄入右手中的紙牌數(shù)字
        System.out.print("請輸入小明右手中的紙牌:");
        int right = sc.nextInt();
        //打印互換前的紙牌
        System.out.println();
        System.out.println("互換前小明手中的紙牌:");
        System.out.println("左手中的紙牌:"+left);
        System.out.println("右手中的紙牌:"+right);
        System.out.println();
        // 定義一個臨時變量temp,保存left的值
        int temp = left;
        // 將right的值賦值給left
        left = right;
        // 將臨時變量temp的值賦值給right 
        right = temp;
        // 打印交換后紙牌
        System.out.println("互換后小明手中的紙牌:");
        System.out.println("左手中的紙牌:"+left);
        System.out.println("右手中的紙牌:"+right);
    }
}

4.2 練習2

需求:

    定義一個int類型的變量,初始化值為123,求這個數(shù)的個位,十位,百位分別是多少?

運行效果:
123的個位是3,十位是2,百位是1
實現(xiàn)步驟:
1.定義一個變量,值為123
2.獲取該數(shù)字中個位鲜戒、十位遏餐、百位的數(shù)字
3.打印結果
代碼實現(xiàn):
public class Task02 {
    public static void main(String[] args) {
        //1.定義一個變量失都,值為123
        int n = 123;
        //2.獲取該數(shù)字中個位咳焚、十位革半、百位的數(shù)字
        // 個位: 數(shù)字 % 10
        int ge = n % 10;
        // 十位: 數(shù)字 / 10 % 10;
        int shi = n / 10 % 10;
        // 百位: 數(shù)字 / 100 % 10;
        int bai = n /100 % 10;
        //3.打印結果
        //123的個位是3,十位是2,百位是1
        System.out.println(n + "的個位是"+ ge +",十位是"+ shi +",百位是" + bai);
    }
}

4.3 練習3

需求:

鍵盤錄入一個三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?

水仙花數(shù)字要求: 指的是一個三位數(shù)督惰,個位、十位商虐、百位的數(shù)字立方和等于原數(shù)

例如 `153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153`

運行效果:

153是水仙花數(shù)字嗎? true
實現(xiàn)步驟:
1.創(chuàng)建鍵盤錄入對象
2.獲取一個int數(shù)字
3.獲取個位,十位,百位
4.求個位,十位,百位的立方和
5.利用三元運算符求立方和是否等于該數(shù)字本身
6.打印結果
代碼實現(xiàn):
public class Task03 {
    public static void main(String[] args) {
        //1.創(chuàng)建鍵盤錄入對象
        Scanner sc = new Scanner(System.in);
        //2.獲取一個int數(shù)字
        System.out.println("請輸入一個三位整數(shù)");
        int num = sc.nextInt();
        
        //3.獲取個位,十位,百位
        int ge = num%10;
        int shi = num/10%10;
        int bai = num/100%10;
        //4.求個位,十位,百位的立方和
        int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
        
        //5.利用三元運算符求立方和是否等于該數(shù)字本身
        boolean flag = (sum==num)?true:false;
        
        //6.打印結果
        System.out.println(num+"是水仙花數(shù)字嗎? "+flag);
    }
}

循環(huán)

  • 理解循環(huán)的概述和分類
  • 掌握for循環(huán)的用法
  • 掌握while循環(huán)的用法
  • 了解do.while循環(huán)的用法

1. 循環(huán)結構

1.1 概述

循環(huán),即事物周而復始的變化叮趴。循環(huán)結構指的是,使一部分代碼按照次數(shù)或一定的條件反復執(zhí)行的一種代碼結構. 有些時候, 我們想代碼是在滿足某些條件的情況下, 重復(循環(huán))執(zhí)行的, 就需要用到循環(huán)結構了.

例如: 打印100次HelloWorld. 如果不用循環(huán)實現(xiàn)的話, 輸出語句我們就需要寫100次, 我們發(fā)現(xiàn)這樣做是非常繁瑣的. 于是, 我們可以通過循環(huán)來優(yōu)化它.

1.2 組成

  1. 初始化條件.

    假設用int類型的變量x記錄循環(huán)次數(shù),x從1開始數(shù), 數(shù)到100剛好100次, 1在這里充當?shù)慕巧褪? 初始化條件.

  2. 判斷條件.

    變量x從1開始數(shù), 數(shù)到100結束. 即: x <= 100, 這就是判斷條件, 用來決定循環(huán)是否繼續(xù)執(zhí)行的.

  3. 控制條件.

    用來控制變量x變化的. 每循環(huán)一次, 變量x的值+1. 即: x++就是控制條件.

  4. 循環(huán)體.

    指的是需要重復執(zhí)行的代碼, 例如: System.out.println("Hello World!");

1.3 分類

  • for循環(huán)

    一般適用于循環(huán)次數(shù)固定的情況.

  • while循環(huán)

    一般適用于循環(huán)次數(shù)不固定的情況.

  • do.while循環(huán)

    我們在實際開發(fā)中, 基本不用. 適用于先執(zhí)行一次, 然后判斷的情況.

2. for循環(huán)

for循環(huán)是我們在實際開發(fā)中應用到的最多的循環(huán), 它一般適用于循環(huán)次數(shù)固定的情況.

2.1 格式

for(初始化條件1; 判斷條件2; 控制條件3) {
    //循環(huán)體4;
}

解釋:

  1. 初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
  2. 判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個循環(huán)就結束了.
  3. 控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
  4. 循環(huán)體: 需要用來重復做的事情(代碼).

2.2 執(zhí)行流程

  1. 先執(zhí)行初始化條件.
  2. 然后執(zhí)行判斷條件, 看其結果是true, 還是false.
  3. 如果是false, 則整個循環(huán)結束.
  4. 如果是true, 則執(zhí)行循環(huán)體.
  5. 執(zhí)行控制條件.
  6. 返回第2步, 繼續(xù)往下重復執(zhí)行.

簡單理解:

  1. 第一次執(zhí)行: 1, 2, 4, 3. 假設判斷條件成立.
  2. 重復執(zhí)行: 2, 4, 3.
  3. 最后一次執(zhí)行: 2 判斷條件不成立, 循環(huán)結束.

2.3 圖解

2.4 案例一: for循環(huán)入門

需求
通過for循環(huán), 打印10次"Hello World!".

參考代碼

//需求: 打印10次HelloWorld
public class ForDemo01 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello World!");
        }
    }
}

2.5 案例二: 打印數(shù)字

需求

  1. 通過for循環(huán), 打印1~5之間的數(shù)字.
  2. 通過for循環(huán), 打印5~1之間的數(shù)字.

參考代碼

public class ForDemo02 {
    public static void main(String[] args) {
        //1. 通過for循環(huán), 打印1~5之間的數(shù)字.
        for (int i = 1; i <= 5 ; i++) {
            System.out.println(i);
        }
        System.out.println("--------------");

        //2. 通過for循環(huán), 打印5~1之間的數(shù)字.
        //ritar
        for (int i = 5; i >= 1; i--) {
            System.out.println(i);
        }
    }
}

2.6 案例三: 求和案例

需求

通過for循環(huán), 獲取1 ~ 5之間的數(shù)字之和.

參考代碼

public class ForDemo03 {
    public static void main(String[] args) {
        //1. 定義變量sum, 用來記錄數(shù)據(jù)和.
        int sum = 0;
        //2. 通過for循環(huán), 依次獲取到1~5之間的數(shù)字.
        for (int i = 1; i <= 5; i++) {
            //3. 將獲取到的數(shù)字, 累加給變量sum.
            sum += i;
        }
        System.out.println("1 - 5之間的數(shù)字之和是: " + sum);
    }
}

細節(jié): 求和變量必須定義到for循環(huán)的外邊, 如果定義到for循環(huán)的內(nèi)容, 則每次循環(huán)都會被重置.

2.7 案例四: 求偶數(shù)和

需求
求1-100之間的偶數(shù)和,并把求和結果打印到控制臺上.

參考代碼

public class ForDemo04 {
    public static void main(String[] args) {
        //1. 定義變量sum, 用來記錄數(shù)據(jù)和.
        int sum = 0;
        //2. 通過for循環(huán), 依次獲取到1 - 100之間的數(shù)字.
        for (int i = 1; i <= 100; i++) {
            //3. 判斷當前遍歷到的數(shù)字是否是偶數(shù).
            if (i % 2 == 0) {
                //4. 走到這里, 說明是偶數(shù), 累加給變量sum.
                sum += i;
            }
        }
        //5. 打印結果.
        System.out.println("1 - 100之間的偶數(shù)之和是: " + sum);
    }
}

2.8 案例五: 獲取水仙花數(shù)

需求

獲取到所有的水仙花數(shù), 并將結果打印到控制臺上.

解釋:

  1. 水仙花數(shù)是一個3位數(shù)的整數(shù).
  2. 該數(shù)字的各個位數(shù)立方和相加等于它本身.
  3. 例如: 153就是水仙花數(shù), 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 153

參考代碼

public class ForDemo05 {
    public static void main(String[] args) {
        int ge, shi, bai;
        for (int i = 100; i < 1000; i++) {
            ge = i / 1 % 10;
            shi = i / 10 % 10;
            bai = i / 100 % 10;
            if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai)
                System.out.println(i);
        }
    }
}

2.9 案例六: 計數(shù)思想

需求

統(tǒng)計所有水仙花數(shù)的個數(shù), 并將其打印到控制臺上.

參考代碼

public class ForDemo06 {
    public static void main(String[] args) {
        int ge, shi, bai,count = 0;
        for (int i = 100; i < 1000; i++) {
            ge = i / 1 % 10;
            shi = i / 10 % 10;
            bai = i / 100 % 10;
            if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai)
                count++;
        }
        System.out.println("水仙花數(shù)的個數(shù)為: " + count);
    }
}

2.10 案例七: 求和 + 計數(shù)

需求

獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個數(shù).

參考代碼

//需求: 獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個數(shù).
public class ForDemo07 {
    public static void main(String[] args) {
        int count = 0;
        int sum = 0;
        for (int i = 1; i <= 100 ; i++) {
            if (i % 2 != 0) {
                sum += i;
                count++;
            }
        }
        System.out.println("1-100之間的奇數(shù)個數(shù)為: " + count + ", 這些奇數(shù)的總和為: " + sum);
    }
}

2.11 案例八: 換行輸出

需求

把1~100之間的數(shù)字, 按照6個一行的格式進行輸出.

參考代碼

public class ForDemo08 {
    public static void main(String[] args) {
        int flag = 6;
        int count = 0;
        for (int i = 1; i <= 100 ; i++) {
            System.out.print(i + "\t");
            if (++count % flag == 0)
                System.out.println();
        }
    }
}

3. while循環(huán)

while循環(huán)也是我們在實際開發(fā)中應用到的比較多的循環(huán), 它一般適用于循環(huán)次數(shù)不固定的情況.

3.1 格式

初始化條件1;
while(判斷條件2) {
    //循環(huán)體3;
    //控制條件4;
}

解釋:

  1. 初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
  2. 判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個循環(huán)就結束了.
  3. 控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
  4. 循環(huán)體: 需要用來重復做的事情(代碼).

3.2 執(zhí)行流程

  1. 先執(zhí)行初始化條件.
  2. 然后執(zhí)行判斷條件, 看其結果是true, 還是false.
  3. 如果是false, 則整個循環(huán)結束.
  4. 如果是true, 則執(zhí)行循環(huán)體.
  5. 執(zhí)行控制條件.
  6. 返回第2步, 繼續(xù)往下重復執(zhí)行.

簡單理解:

  1. 第一次執(zhí)行: 1, 2, 3, 4. 假設判斷條件成立.
  2. 重復執(zhí)行: 2, 3, 4.
  3. 最后一次執(zhí)行: 2 判斷條件不成立, 循環(huán)結束.

3.3 圖解

3.4 案例一: while循環(huán)入門

需求

在控制臺打印10次HelloWorld.

參考代碼

public class WhileDemo01 {
    public static void main(String[] args) {
        int i = 0;
        while(i < 10) {
            System.out.println("Hello World!");
            i++;
        }
    }
}

3.5 案例二: 求和

需求

獲取1~100之間所有偶數(shù)和, 并將結果打印到控制臺上.

參考代碼

//需求: 獲取1 - 100之間的偶數(shù)和.
public class WhileDemo02 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        while (i <= 100) {
            if (i % 2 == 0)
                sum += i;
            i++;
        }
        System.out.println("1-100之間的偶數(shù)和為: " + sum);
    }
}

3.6 案例三: 珠穆朗瑪峰

需求

  1. 已知世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米).

  2. 假如我有一張足夠大的紙板祝,它的厚度是0.1毫米.

  3. 請問宫静,我折疊多少次,可以折成珠穆朗瑪峰的高度?

    即: 紙張的厚度 >= 珠穆朗瑪峰的高度

參考代碼

//案例: 珠穆朗瑪峰
public class WhileDemo03 {
    public static void main(String[] args) {
        //1. 定義變量, 記錄紙張的厚度.
        double paper = 0.1;
        //2. 定義變量, 記錄珠峰的高度.
        int zf = 8844430;
        //3. 定義變量, 記錄紙張的折疊次數(shù).
        int count = 0;
        //4. 通過while循環(huán)實現(xiàn), 獲取折疊次數(shù).
        while (paper < zf) {
            paper *= 2;
            count++;
        }
        //5. 打印結果.
        System.out.println("折疊次數(shù)為: " + count);
    }
}

4. do.while循環(huán)

do.while循環(huán)在實際開發(fā)中應用到的并不是特別多, 所以我們簡單的了解下它的用法即可.

4.1 格式

初始化條件;
do {
    循環(huán)體;
    控制條件;
} while(判斷條件);

解釋:

  1. 初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
  2. 判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個循環(huán)就結束了.
  3. 控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
  4. 循環(huán)體: 需要用來重復做的事情(代碼).

4.2 執(zhí)行流程

  1. 先執(zhí)行初始化條件.
  2. 再執(zhí)行循環(huán)體.
  3. 再執(zhí)行控制條件.
  4. 執(zhí)行判斷條件, 看其結果是true還是false.
  5. 如果是false, 則整個循環(huán)結束.
  6. 如果是true, 則返回第2步重復往下執(zhí)行.

簡單理解:

  1. 第一次執(zhí)行: 1, 2, 3, 4. 假設判斷條件成立.
  2. 重復執(zhí)行: 2, 3, 4.
  3. 最后一次執(zhí)行: 2 判斷條件不成立, 循環(huán)結束.

4.3 圖解

4.4 案例: 打印HelloWorld

需求
通過do.while循環(huán), 在控制臺打印10次Hello World!

參考代碼

public class DoWhileDemo01 {
    public static void main(String[] args) {
        int i = 1;
        do{
            System.out.println("Hello World! " + i);
            i++;
        }while(i <= 10);
    }
}

5. 循環(huán)擴展

5.1 三種循環(huán)之間的區(qū)別

  1. do.while循環(huán)和其他兩個循環(huán)之間的區(qū)別
  • do.while循環(huán)是先執(zhí)行一次, 后判斷.
  • 而其他兩個循環(huán)都是先執(zhí)行判斷條件, 然后決定是否執(zhí)行循環(huán)體.
  1. for循環(huán)和其他兩個循環(huán)之間的區(qū)別
    • for循環(huán)執(zhí)行結束后, 初始化條件就不能繼續(xù)使用了.
    • 而其他兩個循環(huán)執(zhí)行結束后, 初始化條件還可以繼續(xù)使用.

5.2 死循環(huán)

5.2.1 概述

所謂的死循環(huán)指的是永不會結束的循環(huán), 也就是循環(huán)的判斷條件永遠為true,

在后期的開發(fā)中券时,會出現(xiàn)使用死循環(huán)的場景,例如:我們需要讀取用戶輸入的輸入橘洞,但是用戶輸入多少數(shù)據(jù)我們并不清楚捌袜,也只能使用死循環(huán),當用戶不想輸入數(shù)據(jù)了震檩,就可以結束循環(huán)了琢蛤,如何去結束一個死循環(huán)呢蜓堕,就需要使用到跳出語句了。

5.2.2 分類

在Java中, 死循環(huán)的寫法格式主要有以下3種:

  • for(;;) { }
  • while(true){ }
  • do { } while(true)
5.2.3 參考代碼
public class DeadLoop {
    public static void main(String[] args) {
        /*for(;;) {
            System.out.println("Hello World!");
        }*/

        /*while(true) {
            System.out.println("Hello World!");
        }*/

        do {
            System.out.println("Hello World!");
        } while(true);
    }
}

6. 練習

6.1 案例一

需求

  1. 按照從大到小的順序輸出四位數(shù)中的個位+百位=十位+千位(3553,2332,1166,8228,3773)的數(shù)字及個數(shù).

  2. 每行輸出5個滿足條件的數(shù)博其,之間用空格分隔

  3. 如:9999 9988 9977 9966 9955

參考代碼


6.2 案例二

需求

從鍵盤上錄入一個大于100的三位數(shù),求出100到該數(shù)字之間滿足如下要求的數(shù)字之和, 要求如下:

  1. 數(shù)字的個位數(shù)不為7;
  2. 數(shù)字的十位數(shù)不為5;
  3. 數(shù)字的百位數(shù)不為3;

參考代碼


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末套才,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慕淡,更是在濱河造成了極大的恐慌背伴,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峰髓,死亡現(xiàn)場離奇詭異傻寂,居然都是意外死亡,警方通過查閱死者的電腦和手機携兵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門疾掰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徐紧,你說我怎么就攤上這事静檬。” “怎么了并级?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵拂檩,是天一觀的道長。 經(jīng)常有香客問我嘲碧,道長,這世上最難降的妖魔是什么愈涩? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任望抽,我火速辦了婚禮,結果婚禮上钠署,老公的妹妹穿的比我還像新娘糠聪。我一直安慰自己,他們只是感情好谐鼎,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布舰蟆。 她就那樣靜靜地躺著,像睡著了一般狸棍。 火紅的嫁衣襯著肌膚如雪身害。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天草戈,我揣著相機與錄音塌鸯,去河邊找鬼。 笑死唐片,一個胖子當著我的面吹牛丙猬,可吹牛的內(nèi)容都是我干的涨颜。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼茧球,長吁一口氣:“原來是場噩夢啊……” “哼庭瑰!你這毒婦竟也來了?” 一聲冷哼從身側響起抢埋,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤弹灭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后揪垄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穷吮,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年饥努,在試婚紗的時候發(fā)現(xiàn)自己被綠了捡鱼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡酷愧,死狀恐怖堰汉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伟墙,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布滴铅,位于F島的核電站戳葵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汉匙。R本人自食惡果不足惜拱烁,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噩翠。 院中可真熱鬧戏自,春花似錦、人聲如沸伤锚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屯援。三九已至猛们,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狞洋,已是汗流浹背弯淘。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吉懊,地道東北人庐橙。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓假勿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親态鳖。 傳聞我的和親對象是個殘疾皇子转培,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容