Day02_Java基礎(chǔ)2

1.流程控制

1.1 概述

在一個(gè)程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時(shí)候要通過控制語句的執(zhí)行順序來實(shí)現(xiàn)我們想要的功能。
例如: 某些代碼是滿足特定條件的情況下, 才會(huì)被執(zhí)行. 而有些代碼, 在滿足某些條件的情況下, 需要重復(fù)執(zhí)行, 這些, 都需要用到流程控制語句.

1.2 分類

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

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

1.3.1 概念

順序結(jié)構(gòu)指的是代碼是按照從上往下, 從左往右的順序, 依次逐行執(zhí)行的, 且順序結(jié)構(gòu)也是Java程序的默認(rèn)結(jié)構(gòu)

1.3.2 圖解
1.3.3 例子
  • 需求:定義一個(gè)類,在類中定義main方法, 打印如下數(shù)據(jù):
//start
//HelloWorld1
//HelloWorld2
//HelloWorld3
//end
  • 參考代碼
public class Demo01 {
    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");
    }
}

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

1.4.1 概述

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

  • if語句
  • switch.case語句
1.4.2 分類

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

  • if語句(也叫: 單分支)
  • if.else語句(也叫: 雙分支)
  • if.else if語句(也叫: 多分支)
1.4.3 單分支
  • 單分支結(jié)構(gòu)一般用來判斷一種情況, 格式如下:
if(關(guān)系表達(dá)式) {
      語句體;
}
  • 執(zhí)行流程
    1.先執(zhí)行關(guān)系表達(dá)式, 看其結(jié)果是true還是false
    2.如果是true, 則執(zhí)行大括號(hào)中的語句體
    3.如果是false, 則大括號(hào)中的語句體不執(zhí)行
  • 圖解


  • 例子
    需求
    定義變量time表示時(shí)間, 如果它的范圍是在[0,8]之間, 就打印早上好, 否則不操作

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

參考代碼

public class Demo02 {
    public static void main(String[] args) {
        int time = 5;
        if(time >= 0 && time <= 8) {
            System.out.println("早上好");
        }
    }
}
1.4.4 雙分支
  • 雙分支結(jié)構(gòu)指的是if. else語句, 一般用來判斷兩種情況, 格式如下:
if(關(guān)系表達(dá)式) { //if的意思: 如果
    //語句體1;
} else {       //否則...
    //語句體2;
}
  • 執(zhí)行流程
    1.先執(zhí)行關(guān)系表達(dá)式, 看其結(jié)果是true還是false
    2.如果是true, 則執(zhí)行語句體1
    3.如果是false, 則執(zhí)行語句體2
  • 圖解


  • 案例一
    需求
    定義變量time表示時(shí)間, 如果它的范圍是在0~8之間, 就打印早上好, 否則就打印中午好
    參考代碼
public class Demo03 {
    public static void main(String[] args) {
        int time = 5;
        if(time >= 0 && time <= 8) {
            System.out.println("早上好");
        } else {
            System.out.println("中午好");
        }
  • 案例二: 判斷奇偶數(shù)
    需求
    提示用戶鍵盤錄入一個(gè)數(shù)據(jù)并接收
    判斷該數(shù)據(jù)是奇數(shù)還是偶數(shù), 并將結(jié)果打印到控制臺(tái)上
    參考代碼
public class Demo04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個(gè)整數(shù): ");
        int num = sc.nextInt();
        if (num % 2 == 0) {
            System.out.println(num + "是偶數(shù)");
        } else {
            System.out.println(num + "是奇數(shù)");
        }
    }
}

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

例如:
if(5 > 3){
System.out.println("馬上開學(xué)啦!");
}

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

例如:
if(5 > 3){
int a = 10; //這樣寫會(huì)報(bào)錯(cuò), jvm會(huì)識(shí)別這樣代碼為兩行: int a; a = 10;
}
上述的代碼就相當(dāng)于:
if(5 > 3) {
? int a;
a = 10; //這樣寫肯定會(huì)報(bào)錯(cuò)
}

3.你省略if后邊的大括號(hào)時(shí), 有個(gè)問題一定要注意, 不要亂寫分號(hào)

例如:
if(5 > 3) ; //這里如果寫分號(hào)了, 就意味著if語句結(jié)束了.
System.out.println("本意: 這行代碼只有條件成立才會(huì)被執(zhí)行");

1.4.5 多分支
  • 多分支結(jié)構(gòu)指的是if. else if語句, 一般用來判斷多種情況, 格式如下:
if(關(guān)系表達(dá)式1) {
    //語句體1;
} else if(關(guān)系表達(dá)式2){
    //語句體2;
} else if(關(guān)系表達(dá)式3){  //這里可以根據(jù)需求, 有多個(gè)else if語句
    //語句體3;
} else {
    //語句體n;
}
  • 執(zhí)行流程
    1.先執(zhí)行關(guān)系表達(dá)式1, 看其結(jié)果是true還是false
    2.如果是true, 則執(zhí)行語句體1, 整個(gè)if語句結(jié)束
    3.如果是false, 則判斷關(guān)系表達(dá)式2, 看其結(jié)果是true還是false
    4.如果是true, 則執(zhí)行語句體2, 整個(gè)if語句結(jié)束
    5.如果是false, 則判斷關(guān)系表達(dá)式3, ...以此類推
    6.如果所有的關(guān)系表達(dá)式都不成立, 則執(zhí)行else語句的語句體n, 整個(gè)if語句結(jié)束
  • 圖解


  • 案例一: 打印星期
    需求
    提示用戶錄入[1, 7]之間的數(shù)字, 并接收.
    根據(jù)用戶錄入的數(shù)字, 打印對應(yīng)的星期, 格式如下:
    用戶錄入1, 打印"星期一"
    用戶錄入2, 打印"星期二"
    ...以此類推
    用戶錄入非法數(shù)字, 打印"沒有這樣的日期
    參考代碼
package com.company;

import java.util.Scanner;

public class Test10 {
    public static void main(String[] args) {
//        提示用戶錄入[1, 7]之間的數(shù)字, 并接收.
        System.out.println("請輸入一個(gè)整數(shù)數(shù)字:");
        Scanner sc = new Scanner(System.in);
        int data = sc.nextInt();
        System.out.println("您輸入的整數(shù)數(shù)字為:" +data);
//        根據(jù)用戶錄入的數(shù)字, 打印對應(yīng)的星期, 格式如下:
//        用戶錄入1, 打印"星期一"
//        用戶錄入2, 打印"星期二"
//...以此類推
        if(data == 1){
            System.out.println("今天是星期一");
        }
        else if(data == 2){
            System.out.println("今天是星期二");
        }
        else if(data == 3){
            System.out.println("今天是星期三");
        }
        else if(data == 4){
            System.out.println("今天是星期四");
        }
        else if(data == 5){
            System.out.println("今天是星期五");
        }
        else if(data == 6){
            System.out.println("今天是星期六");
        }
        else if(data == 7){
            System.out.println("今天是星期天");
        }
//        用戶錄入非法數(shù)字, 打印"沒有這樣的日期"
        else{
            System.out.println("沒有這樣的日期");
        }
    }
}
  • 案例二: 發(fā)放獎(jiǎng)勵(lì)
    需求
    小明快要期末考試了,小明爸爸對他說,會(huì)根據(jù)他的考試成績,送他不同的禮物.
    假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物,并在控制臺(tái)輸出。
    禮物標(biāo)準(zhǔn)如下:
    95~100 山地自行車一輛
    90~94 游樂場玩一次
    80~89 變形金剛玩具一個(gè)
    80以下 胖揍一頓
    參考代碼
package com.company;

import java.util.Scanner;

public class Test11 {
    public static void main(String[] args) {

        System.out.println("請輸入小明的考試成績:");
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();

        if(score > 100 || score < 0){
            System.out.println("請輸入合法成績");
        }
        else if(score <=100 && score >= 95){
            System.out.println("老爸獎(jiǎng)勵(lì)小明山地自行車一輛");
        }
        else if(score <=94 && score >= 90){
            System.out.println("老爸領(lǐng)小明去游樂場玩一次");
        }
        else if(score <=89 && score >= 80){
            System.out.println("老爸獎(jiǎng)勵(lì)小明變形金剛玩具一個(gè)");
        }
        else{
            System.out.println("恭喜小明,成功引起老爸注意,被胖揍一頓");
        }
    }
}
  • 案例三: 獲取最大值
    需求
    提示用戶錄入3個(gè)整數(shù), 并接收
    通過if語句獲取這三個(gè)整數(shù)的最大值
    將結(jié)果打印到控制臺(tái)上
    參考代碼
import java.util.Scanner;

public class Demo06 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入第一個(gè)整數(shù): ");
        int a = sc.nextInt();
        System.out.println("請錄入第二個(gè)整數(shù): ");
        int b = sc.nextInt();
        System.out.println("請錄入第三個(gè)整數(shù): ");
        int c = sc.nextInt();
        
        //方式一: if嵌套實(shí)現(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語句實(shí)現(xiàn)
        if (a > b && a > c) {
            max2 = a;
        } else if(b > a && b > c) {
            max2 = b;
        } else {
            max2 = c;
        }
        System.out.println("最大值: " + max2);
    }
}
1.4.6 switch語句
  • 概述

switch語句, 一般是用于做固定值判斷的, 在實(shí)際開發(fā)中, 用到的頻率也非常高

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


  • 執(zhí)行流程
    1.先計(jì)算表達(dá)式的值, 然后按照從上往下的順序依次和每一個(gè)case對應(yīng)的值相匹配
    2.如果能匹配成功, 則執(zhí)行該case對應(yīng)的語句體, 然后執(zhí)行break, 至此, 整個(gè)switch語句結(jié)束
    3.如果和所有的case值都不匹配, 則執(zhí)行default對應(yīng)的語句體, 然后執(zhí)行break, 至此, 整個(gè)switch語句結(jié)束

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

  • 執(zhí)行流程圖解


  • 示例一: 春夏秋冬
    需求
    一年有12個(gè)月, 分屬于春夏秋冬4個(gè)季節(jié), 鍵盤錄入一個(gè)月份, 請用程序?qū)崿F(xiàn)判斷該月份屬于哪個(gè)季節(jié), 并輸出。
    具體標(biāo)準(zhǔn)如下:
    輸入: 1、2、12 輸出:冬季
    輸入: 3、4、5 輸出:春季
    輸入: 6、7、8 輸出:夏季
    輸入: 9、10、11 輸出:秋季
    輸入:其它數(shù)字 輸出:數(shù)字有誤
    參考代碼
import java.util.Scanner;

public class Demo07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個(gè)月份: ");
        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;
        }
    }
}
1.4.7 case穿透
  • 概述

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

  • 格式
switch(表達(dá)式) {
    case 值1:    
        語句體1;   //假設(shè)表達(dá)式的值 = 值1, 則執(zhí)行完語句體1后, 不會(huì)判斷第二個(gè)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 Demo08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請錄入一個(gè)月份: ");
        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;
        }
    }
}
  • 思考題
    1.switch語句的小括號(hào)中, 可以放什么?
    switch(),這個(gè)括號(hào)里面一般表示的是整數(shù),包括,short,byte和int類型,char和String類型也可以,但是long類型和浮點(diǎn)型的小數(shù)就不能往這里放了
    2.default語句必須放到switch語句的最后嗎?
    default語句不是必須放在case語句的結(jié)尾處出現(xiàn) switch的執(zhí)行是按照從小到大的順序執(zhí)行的,最后執(zhí)行default語句, 如果default后面帶有break,那么程序就會(huì)正常跳出switch,否則, 程序會(huì)繼續(xù)向后執(zhí)行switch語句!也就是說,不管default放在什么 位置,它總是在最后一個(gè)處理,然后繼續(xù)向下處理! 所以,最后的處理辦法,避免出現(xiàn)以外結(jié)果的最好辦法就是每一個(gè)case 以及default語句都要加一個(gè)break!
    3.break關(guān)鍵字可以省略嗎? 對執(zhí)行結(jié)果是否有影響?
    可以
    在switch語句中,如果case的后面不寫break,將出現(xiàn)case穿透現(xiàn)象,也就是不會(huì)在判斷下一個(gè)case的值,直接向后運(yùn)行,直到遇到break,或者整體switch結(jié)束

  • 案例:發(fā)放獎(jiǎng)勵(lì)
    需求
    1.小明快要期末考試了,小明爸爸對他說,會(huì)根據(jù)他的考試成績,送他不同的禮物.
    2.假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物,并在控制臺(tái)輸出。
    3.禮物標(biāo)準(zhǔn)如下:
    90~100 山地自行車一輛
    80~89 游樂場玩一次
    70~79 變形金剛玩具一個(gè)
    70以下 胖揍一頓
    參考代碼

package com.company;

import java.util.Scanner;

public class Test14 {
    public static void main(String[] args) {

        System.out.println("請輸入小明的考試成績:");
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();
        if (score >= 0 && score <= 100) {
            switch (score / 10) {
                case 10:
                case 9:
                    System.out.println("老爸獎(jiǎng)勵(lì)小明山地自行車一輛");
                    break;
                case 8:
                    System.out.println("老爸領(lǐng)小明去游樂場玩一次");
                    break;
                case 7:
                    System.out.println("老爸獎(jiǎng)勵(lì)小明變形金剛玩具一個(gè)");
                    break;
                default:
                    System.out.println("恭喜小明,成功引起老爸注意,被胖揍一頓");
                    break;

            }
        }
         else{
                System.out.println("請輸入合法成績");
            }
        }
}

1.4.8 練習(xí)題
  • 案例一: 漲工資
    需求
    根據(jù)工齡(整數(shù))給員工漲工資(整數(shù)), 工齡和基本工資通過鍵盤錄入
    漲工資的條件如下:
    [10-15) +5000
    [5-10) +2500
    [3~5) +1000
    [1~3) +500
    [0~1) +200
    打印格式
    您目前工作了10年,基本工資為 3000元, 應(yīng)漲工資 5000元,漲后工資 8000元
    參考代碼
package com.company;

import java.util.Scanner;

public class Test15 {
    public static void main(String[] args) {
        System.out.println("請輸入工齡:");
        Scanner sc = new Scanner(System.in);
        int age = sc.nextInt();
        System.out.println("請輸入基本工資:");
        Scanner scc = new Scanner(System.in);
        int money = scc.nextInt();
        int add_money;
        int money_money;
        if(age >= 0 && age < 15){
            switch(age){
                case 14:
                case 13:
                case 12:
                case 11:
                case 10:
                    add_money = 5000;
                    money_money = money + add_money;
                    System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
                            "漲后工資"+money_money+"元");
                    break;
                case 9:
                case 8:
                case 7:
                case 6:
                case 5:
                    add_money = 2500;
                    money_money = money + add_money;
                    System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
                            "漲后工資"+money_money+"元");
                    break;
                case 4:
                case 3:
                    add_money = 1000;
                    money_money = money + add_money;
                    System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
                            "漲后工資"+money_money+"元");
                    break;
                case 2:
                case 1:
                    add_money = 500;
                    money_money = money + add_money;
                    System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
                            "漲后工資"+money_money+"元");
                    break;
                default:
                    add_money = 200;
                    money_money = money + add_money;
                    System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
                            "漲后工資"+money_money+"元");
                    break;
            }
        }
        else{
            System.out.println("請輸入合法工齡");
        }
    }
}
  • 案例二: 定義計(jì)算器
    需求
    1.功能描述:模擬計(jì)算器功能,對鍵盤錄入的兩個(gè)int類型的數(shù)據(jù)進(jìn)行加、減、乘、除的運(yùn)算,并打印運(yùn)算結(jié)果
    2.要求:
(1)鍵盤錄入三個(gè)整數(shù),其中前兩個(gè)整數(shù)代表參加運(yùn)算的數(shù)據(jù),

  第三個(gè)整數(shù)為要進(jìn)行的運(yùn)算(0:表示加法運(yùn)算,1:表示減法運(yùn)算,2:表示乘法運(yùn)算,3:表示除法運(yùn)算)

(2)使用今天所學(xué)知識(shí)完成功能

(3)演示格式如下:

  請輸入第一個(gè)整數(shù):30

  請輸入第二個(gè)整數(shù):40

  請輸入您要進(jìn)行的運(yùn)算(0:表示加法運(yùn)算,1:表示減法運(yùn)算,2:表示乘法運(yùn)算,3:表示除法運(yùn)算):0

  控制臺(tái)輸出:30+40=70

參考代碼

package com.company;

import java.util.Scanner;

/**
 * @author Liu
 * @date 2020/4/12 15:17
 */
public class Test16 {
    public static void main(String[] args) {
        System.out.println("請輸入第一個(gè)整數(shù):");
        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        System.out.println("請輸入第二個(gè)整數(shù):");
        Scanner scc = new Scanner(System.in);
        int b=scc.nextInt();
        System.out.println("請輸入您要進(jìn)行的計(jì)算(0:表示加法運(yùn)算,1:表示減法運(yùn)算,2:表示乘法運(yùn)算,3:表示除法運(yùn)算)");
        Scanner sccc = new Scanner(System.in);
        int c=sccc.nextInt();
        if (c == 0){
            System.out.println("a + b ="+(a+b));
        }else if(c == 1){
            System.out.println("a - b ="+(a-b));
        }else if(c == 2){
            System.out.println("a * b ="+(a*b));
        }else if(c == 3){
            System.out.println("a / b ="+(a/b));
        }else{
            System.out.println("請輸入正確的值");
        }

    }
}
  • 案例三: 水仙花數(shù)
    需求
    鍵盤錄入一個(gè)三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?
    水仙花數(shù)字要求: 指的是一個(gè)三位數(shù),個(gè)位、十位、百位的數(shù)字立方和等于原數(shù)
    例如 153 333 + 555 + 111 = 27 + 125 + 1 = 153
    實(shí)現(xiàn)步驟
    1.創(chuàng)建鍵盤錄入對象
    2.獲取一個(gè)int數(shù)字
    3.獲取個(gè)位,十位,百位
    4.求個(gè)位,十位,百位的立方和
    5.利用if語句判斷立方和是否等于該數(shù)字本身,并輸出結(jié)果
    參考代碼
package com.company;

import java.util.Scanner;

/**
 * @author Liu
 * @date 2020/4/12 15:38
 */
public class Test17 {
    public static void main(String[] args) {
        System.out.println("請輸入一個(gè)三位整數(shù):");
        Scanner sc = new Scanner(System.in);
        int s=sc.nextInt();
        if (s >= 100 || s < 100) {
            int a1 = s / 100;
            int b1 = (s % 100) / 10;
            int c1 = s % 10;
            int s1 = (a1 * a1 * a1) + (b1 * b1 * b1) + (c1 * c1 * c1);
            if (s == s1) {
                System.out.println("" + s + "是水仙花數(shù)");
            } else {
                System.out.println("" + s + "不是水仙花數(shù)");
            }
        }else{
            System.out.println("請輸入一個(gè)三位整數(shù)");
        }
  }
}

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

  • 概述

循環(huán),即事物周而復(fù)始的變化。循環(huán)結(jié)構(gòu)指的是,使一部分代碼按照次數(shù)或一定的條件反復(fù)執(zhí)行的一種代碼結(jié)構(gòu). 有些時(shí)候, 我們想代碼是在滿足某些條件的情況下, 重復(fù)(循環(huán))執(zhí)行的, 就需要用到循環(huán)結(jié)構(gòu)了.
例如: 打印100次HelloWorld. 如果不用循環(huán)實(shí)現(xiàn)的話, 輸出語句我們就需要寫100次, 我們發(fā)現(xiàn)這樣做是非常繁瑣的. 于是, 我們可以通過循環(huán)來優(yōu)化它.

  • 組成
    1.初始化條件

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

2.判斷條件

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

3.循環(huán)體

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

  • 分類
    1.for循環(huán)

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

2.while循環(huán)

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

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

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

1.5.1 for循環(huán)

  • for循環(huán)是我們在實(shí)際開發(fā)中應(yīng)用到的最多的循環(huán), 它一般適用于循環(huán)次數(shù)固定的情況
  • 格式
for(初始化條件1; 判斷條件2; 控制條件3) {
    //循環(huán)體4;
}

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

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

簡單理解:
1.第一次執(zhí)行: 1, 2, 4, 3. 假設(shè)判斷條件成立
2.重復(fù)執(zhí)行: 2, 4, 3.
3.最后一次執(zhí)行: 2 判斷條件不成立, 循環(huán)結(jié)束

  • 圖解


  • 案例一:for循環(huán)入門
    需求
    通過for循環(huán), 打印10次"Hello World!"
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 8:57
 */
public class LianXi01 {
    public static void main(String[] args) {
        for (int i = 0 ; i < 10 ; i++){
            System.out.println("Hello World!");
        }
    }
}
  • 案例二: 打印數(shù)字
    需求
    1.通過for循環(huán), 打印1~5之間的數(shù)字
    2.通過for循環(huán), 打印5~1之間的數(shù)字
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 8:59
 */
public class LianXi02 {
    public static void main(String[] args) {
        // 通過for循環(huán), 打印1~5之間的數(shù)字
        for ( int i = 1; i <= 5; i++){
            System.out.println(i);
        }
        // 通過for循環(huán), 打印5~1之間的數(shù)字
        for (int i = 5; i > 0; i--){
            System.out.println(i);
        }
    }
}
  • 案例三: 求和案例
    需求
    通過for循環(huán), 獲取1 ~ 5之間的數(shù)字之和
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:03
 */
public class LianXi03 {
    public static void main(String[] args) {
        // 通過for循環(huán), 獲取1 ~ 5之間的數(shù)字之和.
        int sum = 0;
        for ( int i = 1; i <= 5; i++){
            sum = sum+ i;
        }
        System.out.println(sum);
    }
}

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

  • 案例四: 求偶數(shù)和
    需求
    求1-100之間的偶數(shù)和,并把求和結(jié)果打印到控制臺(tái)上
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:08
 */
public class LianXi04 {
    public static void main(String[] args) {
        //求1-100之間的偶數(shù)和,并把求和結(jié)果打印到控制臺(tái)上
        int sum = 0;
        for (int i = 1; i <= 100; i++){
            if (i % 2 == 0){
                sum += i;
            }
        }
        System.out.println(sum);
    }
}
  • 案例五: 獲取水仙花數(shù)
    需求
    獲取到所有的水仙花數(shù), 并將結(jié)果打印到控制臺(tái)上

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

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:12
 */
public class ForLianXi05 {
    public static void main(String[] args) {
        //獲取到所有的水仙花數(shù), 并將結(jié)果打印到控制臺(tái)上
        int ge,shi,bai;
        for(int i = 100;i < 1000; i++){
            ge = i % 10;
            shi = i % 100 / 10;
            bai = i /100;
            if (i == ge*ge*ge +shi*shi*shi + bai*bai*bai){
                System.out.println(i);
            }

        }
    }
}
  • 案例六: 計(jì)數(shù)思想
    需求
    統(tǒng)計(jì)所有水仙花數(shù)的個(gè)數(shù), 并將其打印到控制臺(tái)上
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:18
 */
public class ForLianXi06 {
    public static void main(String[] args) {
        //統(tǒng)計(jì)所有水仙花數(shù)的個(gè)數(shù), 并將其打印到控制臺(tái)上
        int ge,shi,bai;
        int count = 0;
        for(int i = 100;i < 1000; i++){
            ge = i % 10;
            shi = i % 100 / 10;
            bai = i /100;
            if (i == ge*ge*ge +shi*shi*shi + bai*bai*bai){
                count += 1;
                System.out.println(i);
            }
        }
        System.out.println("水仙花的個(gè)數(shù)為"+count+"");
    }
}
  • 案例七: 求和 + 計(jì)數(shù)
    需求
    獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個(gè)數(shù)
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:25
 */
public class ForLianXi07 {
    public static void main(String[] args) {
        //獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個(gè)數(shù)
        int sum = 0;
        int count = 0;
        for(int i = 1;i <= 100;i++){
            if (i % 2 == 1){
                sum += i;
                count += 1;
            }
        }
        System.out.println("1 - 100之間的奇數(shù)和:"+ sum);
        System.out.println("奇數(shù)的個(gè)數(shù):"+count);
    }
}
  • 案例八: 換行輸出
    需求
    把1~100之間的數(shù)字, 按照6個(gè)一行的格式進(jìn)行輸出
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:30
 */
public class ForLianXi08 {
    public static void main(String[] args) {
        //把1~100之間的數(shù)字, 按照6個(gè)一行的格式進(jìn)行輸出
        int count = 0;
        for (int i = 1; i <= 100; i++) {
            System.out.print(i+"\t");
            count += 1;
            if (count % 6 == 0) {
                System.out.println();
            }
        }
    }
}
1.5.2 while循環(huán)
  • while循環(huán)也是我們在實(shí)際開發(fā)中應(yīng)用到的比較多的循環(huán), 它一般適用于循環(huán)次數(shù)不固定的情況
  • 格式
初始化條件1;
while(判斷條件2) {
    //循環(huán)體3;
    //控制條件4;
}

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

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

簡單理解:
第一次執(zhí)行: 1, 2, 3, 4. 假設(shè)判斷條件成立
重復(fù)執(zhí)行: 2, 3, 4.
最后一次執(zhí)行: 2 判斷條件不成立, 循環(huán)結(jié)束

  • 圖解


  • 案例一: while循環(huán)入門
    需求
    在控制臺(tái)打印10次HelloWorld
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:43
 */
public class WhileLianXi01 {
    public static void main(String[] args) {
        //在控制臺(tái)打印10次HelloWorld
        int i = 0;
        while(i < 10){
            System.out.println("HelloWorld");
            i++;
        }
    }
}
  • 案例二: 求和
    需求
    獲取1~100之間所有偶數(shù)和, 并將結(jié)果打印到控制臺(tái)上
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:46
 */
public class WhileLianXi02 {
    public static void main(String[] args) {
        //獲取1~100之間所有偶數(shù)和, 并將結(jié)果打印到控制臺(tái)上
        int i = 1;
        int sum = 0;
        while(i <= 100){
            if(i % 2 == 0){
                sum += i;
            }
            i++;
        }
        System.out.println(sum);
    }
}
  • 案例三: 珠穆朗瑪峰
    需求
    1.已知世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米).
    2.假如我有一張足夠大的紙,它的厚度是0.1毫米.
    3.請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?

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

參考代碼

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 9:50
 */
public class WhileLianXi03 {
    public static void main(String[] args) {
        //已知世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米).
        //假如我有一張足夠大的紙,它的厚度是0.1毫米.
        //請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
        //即: 紙張的厚度 >= 珠穆朗瑪峰的高度
        double weight = 0.1;
        int hight = 8844430;
        int count = 0;
        while(weight <= hight){
            weight *= 2;
            count++;
        }
        System.out.println("需要折疊"+count+"次");
        }
    }
1.5.3 do.while循環(huán)
  • do.while循環(huán)在實(shí)際開發(fā)中應(yīng)用到的并不是特別多, 所以我們簡單的了解下它的用法即可
  • 格式
初始化條件;
do {
    循環(huán)體;
    控制條件;
} while(判斷條件);

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

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

簡單理解:
第一次執(zhí)行: 1, 2, 3, 4. 假設(shè)判斷條件成立
重復(fù)執(zhí)行: 2, 3, 4.
最后一次執(zhí)行: 2 判斷條件不成立, 循環(huán)結(jié)束

  • 圖解


  • 案例: 打印HelloWorld
    需求
    通過do.while循環(huán), 在控制臺(tái)打印10次Hello World
    參考代碼
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:01
 */
public class DoWhileLianXi01 {
    public static void main(String[] args) {
        //通過do.while循環(huán), 在控制臺(tái)打印10次Hello World!
        int i = 1;
        do {
            System.out.println("HelloWorld");
            i++;
        }while(i <= 10);
    }
}
1.5.4 循環(huán)擴(kuò)展
    1. 三種循環(huán)之間的區(qū)別
    • do.while循環(huán)和其他兩個(gè)循環(huán)之間的區(qū)別
      • do.while循環(huán)是先執(zhí)行一次, 后判斷
      • 而其他兩個(gè)循環(huán)都是先執(zhí)行判斷條件, 然后決定是否執(zhí)行循環(huán)體
    • for循環(huán)和其他兩個(gè)循環(huán)之間的區(qū)別
      • for循環(huán)執(zhí)行結(jié)束后, 初始化條件就不能繼續(xù)使用了
      • 而其他兩個(gè)循環(huán)執(zhí)行結(jié)束后, 初始化條件還可以繼續(xù)使用
    1. 死循環(huán)

概述
所謂的死循環(huán)指的是永不會(huì)結(jié)束的循環(huán), 也就是循環(huán)的判斷條件永遠(yuǎn)為true
在后期的開發(fā)中,會(huì)出現(xiàn)使用死循環(huán)的場景,例如:我們需要讀取用戶輸入的輸入,但是用戶輸入多少數(shù)據(jù)我們并不清楚,也只能使用死循環(huán),當(dāng)用戶不想輸入數(shù)據(jù)了,就可以結(jié)束循環(huán)了,如何去結(jié)束一個(gè)死循環(huán)呢,就需要使用到跳出語句了。

分類
在Java中, 死循環(huán)的寫法格式主要有以下3種:
1.for(;;) { }
2.while(true){ }
3.do { } while(true)

  • 參考代碼
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);
    }
}

2.關(guān)系運(yùn)算符

2.1 概述

關(guān)系運(yùn)算符就是用來描述兩個(gè)變量或者常量之間的關(guān)系主要分為以下6種:

符號(hào) 說明
== 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

2.2 注意事項(xiàng)

  • 關(guān)系運(yùn)算符的結(jié)果都是boolean類型,要么是true,要么是false
  • 千萬不要把==寫成了=, 否則結(jié)果可能不是你想要的

2.3 案例

需求
1.定義兩個(gè)int類型的變量a和b, 分別賦值為10和5
2.通過關(guān)系運(yùn)算符比較這兩個(gè)變量之間的關(guān)系, 并打印結(jié)果
參考代碼

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

3.邏輯運(yùn)算符

3.1 概述

  • 邏輯運(yùn)算符是用來判斷并且, 或者, 除非等邏輯關(guān)系的符號(hào)
  • 該符號(hào)兩端一般連接值為布爾類型的關(guān)系表達(dá)式

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

3.2 分類

注意: 假設(shè)下表中的a和b, 都是boolean類型的值

小技巧:
對一個(gè)布爾數(shù)據(jù), 偶數(shù)次取反, 該數(shù)據(jù)值不變
!true = false

3.3 示例: 邏輯運(yùn)算符入門

需求
1.定義三個(gè)int類型的變量a, b, c, 它們的初始化值分別為10, 20, 30.
2.通過上述的三個(gè)變量, 演示各個(gè)邏輯運(yùn)算符
參考代碼

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:09
 */
public class LuoJiLianxi01 {
    public static void main(String[] args) {
        //定義三個(gè)int類型的變量a, b, c, 它們的初始化值分別為10, 20, 30.
        //通過上述的三個(gè)變量, 演示各個(gè)邏輯運(yùn)算符.

        int a = 10, b = 20, c = 30;
        //&: 邏輯與, 并且的意思, 有false則整體為false.
        //相當(dāng)于: 班長找女朋友, 要求長得漂亮, 并且身材好.
        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.
        //相當(dāng)于: 降低條件了, 要么長得漂亮, 要么身材好.
        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("-----------------");

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

        //邏輯異或, 異同的意思, 相同為false, 不同為true.
        //相當(dāng)于: 最后還是找了個(gè)男的, 但是領(lǐng)不了證.
        //法律規(guī)定: 一夫一妻, 一男一女, 必須是異性才能領(lǐng)證.
        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
    }
}

3.4 短路邏輯運(yùn)算符

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

3.4.1 格式
3.4.2 解釋
  • 短路與運(yùn)算中,只要有一個(gè)表達(dá)式的值為false,那么結(jié)果就可以判定為false了,沒有必要將所有表達(dá)式的值都計(jì)算出來,短路與運(yùn)算符就有這樣的效果,可以提高效率。
  • 同理在短路或運(yùn)算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式將不再參與運(yùn)算。
3.4.3 短路和非 短路的區(qū)別

+邏輯與 和 短路與之間的區(qū)別

  • 邏輯與&(也叫單與): 無論左邊真假,右邊都要執(zhí)行。
  • 短路與&&(也叫雙與): 如果左邊為真,右邊執(zhí)行;如果左邊為假,右邊不執(zhí)行。
  • 邏輯或 和 短路或之間的區(qū)別
    • 邏輯或|(也叫單或): 無論左邊真假,右邊都要執(zhí)行。
    • 短路或||(也叫雙或): 如果左邊為假,右邊執(zhí)行;如果左邊為真,右邊不執(zhí)行。
  • 記憶: 在實(shí)際開發(fā)中, 我們用的最多的邏輯運(yùn)算符就是: &&, ||, !
3.4.4案例
package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:11
 */
public class LuoJiLianxi02 {
    public static void main(String[] args) {
        //1. 定義兩個(gè)int類型的變量a和b, 初始化值分別為: 2, 5
        int a = 2, b = 5;
        //2. 演示邏輯與(&)
       /* System.out.println((a++ > 2) & (b++ < 7)); //兩個(gè)表達(dá)式都會(huì)執(zhí)行.
        System.out.println(a);
        System.out.println(b);*/
        System.out.println("------------------");

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

4.三元運(yùn)算符

4.1 概述

三元運(yùn)算符也叫三目運(yùn)算符,即由三部分組成,格式如下:

(關(guān)系表達(dá)式) ? 表達(dá)式1:表達(dá)式2;

4.2 執(zhí)行流程

1.先執(zhí)行關(guān)系表達(dá)式, 看其結(jié)果是true還是false.
2.如果是true, 則執(zhí)行表達(dá)式1
3.如果是false, 則執(zhí)行表達(dá)式2

4.3案例一: 入門案例

需求
1.定義兩個(gè)int類型的變量a. b, 初始化值分別為10, 20
2.通過三元運(yùn)算符, 獲取變量a和b的最大值.
3.將結(jié)果(最大值)打印到控制臺(tái)上.
參考代碼

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:14
 */
public class LuoJiLianxi03 {
    public static void main(String[] args) {
        //定義兩個(gè)int類型的變量a. b, 初始化值分別為10, 20
        //通過三元運(yùn)算符, 獲取變量a和b的最大值.
        //將結(jié)果(最大值)打印到控制臺(tái)上.
        //(關(guān)系表達(dá)式) ? 表達(dá)式1:表達(dá)式2;
        int a = 10;
        int b = 20;
        int max = a < b ? b : a;
        System.out.println(max);
    }
}

4.4 案例二: 判斷老虎體重

需求
動(dòng)物園里有兩只老虎,已知兩只老虎的體重分別為180kg、200kg,請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是否相同。
參考代碼

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:19
 */
public class LuoJiLianxi04 {
    public static void main(String[] args) {
        //動(dòng)物園里有兩只老虎,已知兩只老虎的體重分別為180kg、200kg,
        // 請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是否相同
        int a = 180;
        int b = 200;
        boolean flag = a == b ? true : false;
        System.out.println(flag);
    }
}

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

需求
1.一座寺廟里住著三個(gè)和尚,已知他們的身高分別為150cm、210cm、165cm.
2.請用程序?qū)崿F(xiàn)獲取這三個(gè)和尚的最高身高。
參考代碼

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:24
 */
public class LuoJiLianxi05 {
    public static void main(String[] args) {
        //一座寺廟里住著三個(gè)和尚,已知他們的身高分別為150cm、210cm、165cm
        //請用程序?qū)崿F(xiàn)獲取這三個(gè)和尚的最高身高
        int a = 150;
        int b = 210;
        int c = 165;

        int i = a > b ? a : b;
        int max = i > c ? i : c;
        System.out.println(max);

    }
}

5.鍵入

5.1 概述

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

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

5.2 使用步驟

1.導(dǎo)包 包就是文件夾

注意:
Scanner類是java.util包下的類, 使用之前必須要先導(dǎo)包.
導(dǎo)包的語句是定義在類的上面的, 格式如下:

import java.util.Scanner;

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

//暫時(shí)先理解為固定格式, 也就是必須這么寫.
Scanner sc = new Scanner(System.in);

3.通過Scanner類的nextInt()方法接收用戶錄入的數(shù)據(jù)

int a = sc.nextInt();

5.3 案例一: Scanner入門

需求
提示用戶錄入他/她的年齡.
通過鍵盤錄入功能, 接收用戶錄入的年齡.
將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺(tái)上.
參考代碼

package com.company;

import java.util.Scanner;

/**
 * @author Liu
 * @date 2020/4/14 10:29
 */
public class JianRuLianXi01 {
    public static void main(String[] args) {

        //提示用戶錄入他/她的年齡.
        System.out.println("請輸入年齡:");

        //通過鍵盤錄入功能, 接收用戶錄入的年齡.
         Scanner scanner = new Scanner(System.in);
         int age = scanner.nextInt();

        //將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺(tái)上.
         System.out.println(age);
    }
}

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

需求
提示用戶錄入第一個(gè)和尚的身高, 并接收
提示用戶錄入第二個(gè)和尚的身高, 并接收
提示用戶錄入第三個(gè)和尚的身高, 并接收.
通過三元運(yùn)算符, 獲取三個(gè)和尚中身高最矮的那個(gè)和尚的身高.
將結(jié)果(最低身高)打印到控制臺(tái)上.
參考代碼

package com.company;

import java.util.Scanner;

/**
 * @author Liu
 * @date 2020/4/14 10:34
 */
public class JianRuLianXi02 {
    public static void main(String[] args) {

        //提示用戶錄入第一個(gè)和尚的身高, 并接收
        System.out.println("請輸入第一個(gè)和尚的身高:");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();

        //提示用戶錄入第二個(gè)和尚的身高, 并接收
        System.out.println("請輸入第一個(gè)和尚的身高:");
        Scanner scanner1 = new Scanner(System.in);
        int b = scanner1.nextInt();

        //提示用戶錄入第三個(gè)和尚的身高, 并接收.
        System.out.println("請輸入第一個(gè)和尚的身高:");
        Scanner scanner2 = new Scanner(System.in);
        int c = scanner2.nextInt();

        //通過三元運(yùn)算符, 獲取三個(gè)和尚中身高最矮的那個(gè)和尚的身高.
        int i = a > b ? a : b;
        int max = i > c ? i : c;

        //將結(jié)果(最低身高)打印到控制臺(tái)上.
        System.out.println(max);

    }
}

6. IDEA常用快捷鍵

快捷鍵 功能
Alt+Enter 導(dǎo)入包,自動(dòng)修正代碼
Ctrl+Y 刪除光標(biāo)所在行
Ctrl+D 復(fù)制光標(biāo)所在行的內(nèi)容,插入光標(biāo)位置下面
Ctrl+Alt+L 格式化代碼
Ctrl+/ 單行注釋
Ctrl+Shift+/ 選中代碼注釋,多行注釋,再按取消注釋
Alt+Shift+上下箭頭/ 移動(dòng)當(dāng)前代碼行

7.練習(xí)

7.1 練習(xí)一

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

package com.company;

import java.util.Scanner;

/**
 * @author Liu
 * @date 2020/4/12 15:45
 */
public class Test18 {
    public static void main(String[] args) {
        System.out.println("請輸入小明左手拿的紙牌:");
        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        System.out.println("請輸入小明右手拿的紙牌:");
        Scanner scc = new Scanner(System.in);
        int b=scc.nextInt();
        System.out.println("互換前小明手中的紙牌:");
        System.out.println("小明左手拿的紙牌:"+a);
        System.out.println("小明右手拿的紙牌:"+b);
        int c = b;
        int d = a;
        System.out.println("互換后小明手中的紙牌:");
        System.out.println("小明左手拿的紙牌:"+c);
        System.out.println("小明右手拿的紙牌:"+d);
    }

}

練習(xí)二

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

public class Task01 {
    public static void main(String[] args) {
        //1.定義一個(gè)變量,值為123
        int n = 123;
        //2.獲取該數(shù)字中個(gè)位、十位、百位的數(shù)字
        // 個(gè)位: 數(shù)字 % 10
        int ge = n % 10;
        // 十位: 數(shù)字 / 10 % 10;
        int shi = n / 10 % 10;
        // 百位: 數(shù)字 / 100 % 10;
        int bai = n /100 % 10;
        //3.打印結(jié)果
        //123的個(gè)位是3,十位是2,百位是1
        System.out.println(n + "的個(gè)位是"+ ge +",十位是"+ shi +",百位是" + bai);
    }
}

練習(xí)三

需求
鍵盤錄入一個(gè)三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?
水仙花數(shù)字要求: 指的是一個(gè)三位數(shù),個(gè)位、十位、百位的數(shù)字立方和等于原數(shù)
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
參考代碼

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

練習(xí)四

需求
按照從大到小的順序輸出四位數(shù)中的個(gè)位+百位=十位+千位(3553,2332,1166,8228,3773)的數(shù)字及個(gè)數(shù).
每行輸出5個(gè)滿足條件的數(shù),之間用空格分隔
如:9999 9988 9977 9966 9955
參考代碼

package com.company;

/**
 * @author Liu
 * @date 2020/4/14 10:50
 */
public class Task01 {
    public static void main(String[] args) {
        //按照從大到小的順序輸出四位數(shù)中的個(gè)位+百位=十位+千位(3553,2332,1166,8228,3773)的數(shù)字及個(gè)數(shù).
        //每行輸出5個(gè)滿足條件的數(shù),之間用空格分隔
        //如:9999 9988 9977 9966 9955
        int count = 0;
        for (int i = 9999 ; i >= 1000;i--){
            int ge = i % 10;
            int shi = (i % 100) / 10;
            int bai = (i % 100) / 100;
            int qian = i / 1000;
            if (ge + bai == shi + qian ){
                count += 1;
                if (count <= 5){
                    System.out.print(i +" ");
            }

            }
        }
    }
}

練習(xí)五

需求
從鍵盤上錄入一個(gè)大于100的三位數(shù),求出100到該數(shù)字之間滿足如下要求的數(shù)字之和, 要求如下:
數(shù)字的個(gè)位數(shù)不為7;
數(shù)字的十位數(shù)不為5;
數(shù)字的百位數(shù)不為3;
參考代碼

package com.company;

import java.util.Scanner;

/**
 * @author Liu
 * @date 2020/4/14 10:50
 */
public class Task02 {
    public static void main(String[] args) {
        //從鍵盤上錄入一個(gè)大于100的三位數(shù),求出100到該數(shù)字之間滿足如下要求的數(shù)字之和, 要求如下:
        //數(shù)字的個(gè)位數(shù)不為7;
        //數(shù)字的十位數(shù)不為5;
        //數(shù)字的百位數(shù)不為3;
        System.out.println("請輸入一個(gè)大于100的三位數(shù):");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();


            for (int i = 100; i <= n ; i++){
                int ge = i % 10;
                int shi = (i % 100) / 10;
                int bai = i / 100;
                if (ge != 7 && shi != 5 && bai != 3){
                    System.out.println(i);
                }

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

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

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