Java流程控制

Java流程控制

用戶交互 Scanner

Scanner對象

  • 之前我們學(xué)的基本語法中我們并沒有實現(xiàn)程序和人的交互 但是Java給我們提供了這一樣一個工具類 我們可以獲取用戶的輸入 java.util.Scanner 是Java5的新特性 我們可以通過Scanner 類來獲取用戶的輸入

  • 基本語法:

    Scanner s = new Scanner(system.in);

  • 通過Scanner 類的 next() 與 nextLine() 方法獲取輸入的字符串 在讀取前我們一般需要 使用hasNext() 與 hasNextLine() 判斷是否還有輸入的數(shù)據(jù)

  • next():

    1. 一定要讀取到有效字符后才可以結(jié)束輸入
    2. 對輸入有效字符之前遇到的空白,next()方法會自動將其去掉
    3. 只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結(jié)束符
    4. next()不能得到帶有空格的字符串
    package com.cheer.scanner;
    
    import java.util.Scanner;
    
    public class Demo01 {
        public static void main(String[] args) {
    
            //創(chuàng)建一個掃描器對象 用于接收鍵盤數(shù)據(jù)
    
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("使用next方式接收:");
    
            //判斷用戶有沒有輸入字符串
            if (scanner.hasNext()){
                //使用next方式接收
                String str = scanner.next();
                System.out.println("輸入的內(nèi)容為:"+str);
            }
    
            //凡是屬于IO流的類如果不關(guān)閉會一直占用資源 要養(yǎng)成好習(xí)慣用完就關(guān)掉
            scanner.close();
        }
    }
    
  • nextLine():

    1. 以Enter為結(jié)束符 也就是說 nextLine()方法返回的是輸入回車之前的所有字符
    2. 可以獲得空白
    package com.cheer.scanner;
    
    import java.util.Scanner;
    
    public class Demo02 {
        public static void main(String[] args) {
            //從鍵盤接收數(shù)據(jù)
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("使用next方式接收:");
    
            //判斷是否還有輸入
            if (scanner.hasNextLine()){
    
                String str = scanner.nextLine();
                System.out.println("輸入的內(nèi)容為:"+str);
            }
            scanner.close();
        }
    }
    
    package com.cheer.scanner;
    
    import java.util.Scanner;
    
    public class Demo03 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("請輸入:");
    
            String str = scanner.nextLine();
    
            System.out.println("輸入的內(nèi)容為:"+str);
        }
    
    }
    
    package com.cheer.scanner;
    
    import java.util.Scanner;
    
    public class Demo04 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            //從鍵盤接收數(shù)據(jù)
            int i = 0;
            float f = 0.0f;
    
            System.out.println("請輸入整數(shù):");
    
            //如果梢灭。夷家。。那么
            if (scanner.hasNextInt()){
                i = scanner.nextInt();
                System.out.println("整數(shù)數(shù)據(jù):" + i);
            }else {
                System.out.println("輸入的不是整數(shù)數(shù)據(jù)敏释!");
            }
    
    package com.cheer.scanner;
    
    import java.util.Scanner;
    
    public class Demo05 {
        public static void main(String[] args) {
            //輸入多個數(shù)字 并求其總和跟平均值 每輸入一個數(shù)字用回車確認(rèn) 通過輸入非數(shù)字來結(jié)束輸入并輸出執(zhí)行結(jié)果
            Scanner scanner = new Scanner(System.in);
    
            //和
            double sum = 0;
            //計算輸入了多少個數(shù)字
            int m = 0;
    
            //通過循環(huán)判斷是否還有輸入 并在里面對每一次進(jìn)行求和跟統(tǒng)計
            while (scanner.hasNextDouble()){
                double x =scanner.nextDouble();
                m = m + 1; //也可寫成m++
                sum = sum + x;
                System.out.println("你輸入了第"+m+"個數(shù)據(jù) 當(dāng)前結(jié)果總和為"+sum);
            }
    
            System.out.println(m + "個數(shù)的和為" + sum);
            System.out.println(m + "個數(shù)的平均值為" +(sum/m));
    
            scanner.close();
        }
    }
    

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

  • Java的基本結(jié)構(gòu)就是順序結(jié)構(gòu) 除非特別指明 否則就按照順序一句一句執(zhí)行

  • 順序機構(gòu)是最簡單的算法結(jié)構(gòu)

    graph TD
     A(A) -->B(B)
        B --> C(C)
    
  • 語句與語句之間 框與框之間是按從上到下的順序進(jìn)行的 它是由若干個依次執(zhí)行的處理步驟組成的 它是任何一個算法都離不開的一種基本算法結(jié)構(gòu)

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

  • if單選擇結(jié)構(gòu)
  • if雙選擇結(jié)構(gòu)
  • if多選擇結(jié)構(gòu)
  • 嵌套的if結(jié)構(gòu)
  • switch多選擇結(jié)構(gòu)

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

  • 我們很多時候需要去判斷一個東西是否可行 然后我們才去執(zhí)行 這樣一個過程在程序中用if語句來表示

  • 語法:

    if(布爾表達(dá)式){
       //如果布爾表達(dá)式為true將執(zhí)行的語句
    }
    

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

  • 那現(xiàn)在有個需求 公司要收購一個軟件 成功了 給人支付100萬元 失敗了 自己找人開發(fā)

    這樣的需求用一個if就搞不定了 我們需要有兩個判斷 需要一個雙結(jié)構(gòu)選擇 所以就有了if-else結(jié)構(gòu)

  • 語法“

    if(布爾表達(dá)式){
        //如果布爾表達(dá)式的值為true
    }else{
        //如果布爾表達(dá)式的值為false
    }
    

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

  • 我們發(fā)現(xiàn)剛才的代碼不符合實際情況 真實的情況還可能存在ABCD 存在區(qū)間多級判斷

    比如90-100是A 80-89是B... 在生活中我們很多時候的選擇也不僅僅只有兩個 所以我們需要一個多選擇結(jié)構(gòu)來處理這類問題

  • 語法:

    if(布爾表達(dá)式1){
        //如果布爾表達(dá)式1的值為true執(zhí)行代碼
    }else if(布爾表達(dá)式2)
        //如果布爾表達(dá)式2的值為true執(zhí)行代碼
    }else if(布爾表達(dá)式3)
        //如果布爾表達(dá)式3的值為true執(zhí)行代碼
    }else{
        //如果以上布爾表達(dá)式的值都不為true執(zhí)行代碼
    }
    

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

  • 使用嵌套的if...else語句是合法的 也就是說你可以在另一個if或者else if語句中使用if或者else if語句 你可以像if語句一樣嵌套else if...else

  • 語法:

    if(布爾表達(dá)式1){
        //如果布爾表達(dá)式1的值為true執(zhí)行代碼
       if(布爾表達(dá)式2){
        //如果布爾表達(dá)式2的值為true執(zhí)行代碼
       }
    }
    

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

  • 多選擇結(jié)構(gòu)還有一個實現(xiàn)方式就是 switch case 語句
  • switch case 語句判斷一個變量與一個系列值中某個值是否相等 每個值稱為一個分支
  • switch 語句中的變量類型可以是:
    • byte short int或者 char
    • 從Java SE 7 開始 switch 支持字符串 String類型了
    • 同時 case 標(biāo)簽必須為字符串常量或者字面量
package com.cheer.struct;

public class SwitchDemo01 {
    public static void main(String[] args) {
        //case穿透  switch 匹配一個具體的值
        char grade = 'B';

        switch (grade){
            case 'A':
                System.out.println("優(yōu)秀");
                break;//可選
            case 'B':
                System.out.println("良好");
                break;//可選
            case 'C':
                System.out.println("及格");
                break;//可選
            case 'D':
                System.out.println("再接再厲");
                break;//可選
            case 'E':
                System.out.println("掛科");
                break;//可選
            default: //可選
                System.out.println("未知等級");
        }
    }
}
package com.cheer.struct;

public class SwitchDemo02 {
    public static void main(String[] args) {
        String name = "哈哈哈";
        //JDK7的新特性 表達(dá)式結(jié)果可以是字符串
        //字符的本質(zhì)還是數(shù)字

        //反編譯  java---class (字節(jié)碼文件)--- 反編譯(IDEA)
        switch (name){
            case "哈哈哈":
                System.out.println("嚯嚯嚯");
                break;
            case "呵呵呵":
                System.out.println("嘿嘿嘿");
                break;
            default:
                System.out.println("笑一個");
        }
    }
}

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

  • while循環(huán)
  • do...while循環(huán)
  • for循環(huán)
  • 在Java5中引入了一種主要用于數(shù)組的增強型for循環(huán)

while循環(huán)

  • while是最基本的循環(huán) 它的結(jié)構(gòu)為:

    while(布爾表達(dá)式){
        //循環(huán)內(nèi)容
    }
    
    
    package com.cheer.struct;
    
    public class WhileDemo01 {
        public static void main(String[] args) {
    
            //輸出1-100
    
            int i = 0;
    
            while (i<100){
                i++;
                System.out.println(i);
            }
        }
    }
    
  • 只要布爾表達(dá)式為true 循環(huán)就會一直執(zhí)行下去

  • 我們大多是情況是會讓循環(huán)停止下來的 我們需要一個讓表達(dá)式失效的方式來結(jié)束循環(huán)

  • 少部分情況需要循環(huán)一直執(zhí)行 比如服務(wù)器的請求響應(yīng)監(jiān)聽等

  • 循環(huán)條件一直為true就會造成無限循環(huán)【死循環(huán)】 我們正常的業(yè)務(wù)編程中應(yīng)該避免死循環(huán) 會影響程序性能或者造成程序卡死崩潰

  • 思考:1+2+3+...+100=?

    package com.cheer.struct;
    
    public class WhileDemo02 {
        public static void main(String[] args) {
            //1+2+3+...+100=?
    
            int i = 0;
            int sum = 0;
    
            while (i<=100){
                sum = sum + i;
                i++;
            }
            System.out.println(sum);
        }
    }
    
    

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

  • 對于while語句而言 如果不滿足條件 則不能進(jìn)入循環(huán) 但有時候我們需要即使不滿足條件 也至少執(zhí)行一次

  • do..while循環(huán)和while循環(huán)相似 不同的是 do..while循環(huán)至少會執(zhí)行一次

    do{
        //代碼語句
    }while(布爾表達(dá)式);
    
    package com.cheer.struct;
    
    public class DoWhileDemo01 {
        public static void main(String[] args) {
    
            int i = 1;
            do{
                System.out.println(i);
                i++;
            }while(i<=100);
        }
    }
    
  • while和do..while的區(qū)別:

    • while先判斷再執(zhí)行 do..while先執(zhí)行再判斷
    • do..while總實保證循環(huán)至少被執(zhí)行一次

for循環(huán)

  • 雖然所有循環(huán)結(jié)構(gòu)都可以喲弄個while或者do..while表示 但Java提供了另一種語句---for循環(huán) 使一些循環(huán)結(jié)構(gòu)變得更加簡單

  • for循環(huán)語句是支持迭代的一種通用結(jié)構(gòu) 是最有效 最靈活的循環(huán)結(jié)構(gòu)

  • for循環(huán)執(zhí)行的次數(shù)是在執(zhí)行前就確定的 語法格式為:

    for(初始化库快;布爾表達(dá)式;更新){
        //代碼語句
    }
    
    
    package com.cheer.struct;
    
    public class ForDemo01 {
        public static void main(String[] args) {
            //初始化//條件判斷//迭代
            //快捷鍵輸入:100.for
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
    
            }
        }
    }
    
  • 練習(xí)1:計算0到100之間的奇數(shù)和偶數(shù)的和

    package com.cheer.struct;
    
    public class ForDemo02 {
        public static void main(String[] args) {
    
            int oddSum = 0;
            int evenSum = 0;
    
            for (int i = 0; i < 100; i++) {
                if(i%2!=0){
                    oddSum+=i;
                }else {
                    evenSum+=i;
                }
            }
            System.out.println("奇數(shù)的和"+oddSum);
            System.out.println("偶數(shù)的和"+evenSum);
        }
    }
    
    
  • 練習(xí)2:用while或for循環(huán)輸出1-1000之間能被5整除的數(shù) 并且每行輸出3個

    package com.cheer.struct;
    
    public class ForDemo03 {
        public static void main(String[] args) {
    
            for (int i = 1; i <= 1000; i++) {
                if (i%5==0){
                    System.out.print(i+"\t");
                }
                if (i%15==0){
                    System.out.println();
                    //System.out.print("\n");
                }
    
            }
        }
    }
    
  • 練習(xí)3:打印九九乘法表

    package com.cheer.struct;
    
    public class ForDemo04 {
        public static void main(String[] args) {
    
            for (int i = 1; i <= 9; i++) {
                for (int n = 1; n <= i; n++) {
                    System.out.print(n+"*"+i+"="+(i*n) + "\t");
                }
                System.out.println();
            }
        }
    }
    
    

強型for循環(huán)

  • 數(shù)組重點使用

  • Java5引入了一種主要用于數(shù)組或集合的增強型for循環(huán)

  • Java增強for循環(huán)語法格式為:

    for(聲明語句:表達(dá)式)
    {
        //代碼句子
    }
    
    
    package com.cheer.struct;
    
    public class ForDemo05 {
        public static void main(String[] args) {
            int[] numbers = {10,20,30,40,50};//定義了一個數(shù)組
    
            for(int i = 0;i < 5;i++){
                System.out.println(numbers[i]); //和for對比
            }
            //遍歷數(shù)組的元素
            for (int x:numbers){
                System.out.println(x);
            }
        }
    }
    
  • 聲明語句:聲明新的局部變量 該變量的類型必須和數(shù)組元素的類型匹配 其作用域限定在循環(huán)語句塊 其值與此時數(shù)元素的值相等

  • 表達(dá)式:表達(dá)式是要訪問的數(shù)組名 或者是返回值為數(shù)組的方法

break & continue

  • break在任何循環(huán)語句的主體部分 均可用break控制循環(huán)的流程 break用于強行退出循環(huán) 不執(zhí)行循環(huán)中剩余的語句(break語句也可在switch語句中使用)

    package com.cheer.struct;
    
    public class BreakDemo {
        public static void main(String[] args) {
            int i = 0;
            while(i<100){
                i++;
                System.out.println(i);
                if(i==30){
                    break;
                }
            }
        }
    }
    
  • continue語句用在循環(huán)語句體中 用于終止某次循環(huán)過程 即跳過循環(huán)體中尚未執(zhí)行的語句 接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定

    package com.cheer.struct;
    
    public class ContinueDemo {
        public static void main(String[] args) {
            int i = 0;
            while (i<100){
                i++;
                if (i%10==0){
                    System.out.println();
                    continue;
                }
                System.out.print(i+"\t");
            }
        }
    
  • 關(guān)于goto關(guān)鍵字

    • goto關(guān)鍵字很早就在程序設(shè)計語言中出現(xiàn) 盡管goto仍是Java的一個保留字 但并未在語言中得到正式使用 Java沒有g(shù)oto 然而 在break和continue這兩個關(guān)鍵字的身上 我們?nèi)匀豢梢钥闯鲆恍ゞoto的影子---帶標(biāo)簽的break和continue
    • 標(biāo)簽 是指后面跟一個冒號的標(biāo)識符 例如: label:
    • 對于Java來說唯一用到標(biāo)簽的地方是在循環(huán)語句之前 而在循環(huán)之前設(shè)置標(biāo)簽的唯一理由是:我們希望在其中嵌套另一個循環(huán) 由于break和continue關(guān)鍵字通常只中斷當(dāng)前循環(huán) 但若隨同標(biāo)簽使用 它們就會中斷到存在標(biāo)簽的地方

練習(xí)

package com.cheer.struct;

public class TestDemo01 {
    public static void main(String[] args) {
        //打印三角形

        //    *
        //   ***
        //  *****
        // *******
        //*********

        for (int i = 1; i <= 5; i++) {
            for (int j =5; j>i; j--){
                System.out.print(" ");
            }
            for (int j =1; j<=i; j++){
                System.out.print("*");
            }
            for (int j =1; j<i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钥顽,一起剝皮案震驚了整個濱河市义屏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耳鸯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膀曾,死亡現(xiàn)場離奇詭異县爬,居然都是意外死亡,警方通過查閱死者的電腦和手機添谊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門财喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斩狱,你說我怎么就攤上這事耳高。” “怎么了所踊?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵泌枪,是天一觀的道長。 經(jīng)常有香客問我秕岛,道長碌燕,這世上最難降的妖魔是什么误证? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮修壕,結(jié)果婚禮上愈捅,老公的妹妹穿的比我還像新娘。我一直安慰自己慈鸠,他們只是感情好蓝谨,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著青团,像睡著了一般譬巫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壶冒,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天缕题,我揣著相機與錄音,去河邊找鬼胖腾。 笑死烟零,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咸作。 我是一名探鬼主播锨阿,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼记罚!你這毒婦竟也來了墅诡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桐智,失蹤者是張志新(化名)和其女友劉穎末早,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體说庭,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡然磷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刊驴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姿搜。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捆憎,靈堂內(nèi)的尸體忽然破棺而出舅柜,到底是詐尸還是另有隱情,我是刑警寧澤躲惰,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布致份,位于F島的核電站,受9級特大地震影響础拨,放射性物質(zhì)發(fā)生泄漏知举。R本人自食惡果不足惜瞬沦,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雇锡。 院中可真熱鬧逛钻,春花似錦、人聲如沸锰提。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽立肘。三九已至边坤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谅年,已是汗流浹背茧痒。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留融蹂,地道東北人旺订。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像超燃,于是被迫代替她去往敵國和親区拳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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

  • /*各個變量的命名不規(guī)范意乓,若要參考樱调,請自己對各個變量進(jìn)行規(guī)范命名*/ /*1、企業(yè)發(fā)放的獎金根據(jù)利潤提成届良。利潤低于...
    煙雨樓邰郁維閱讀 965評論 0 0
  • import java.util.*; public class Helloworld { private sta...
    殤青澀年華瘋子的明天閱讀 238評論 0 0
  • 流程控制 目錄:順序結(jié)構(gòu)分支循環(huán)循環(huán)嵌套控制循環(huán)的關(guān)鍵詞 總會出現(xiàn)一種場景:要滿足某個條件時笆凌,才去做一件事情。 ...
    Ansaxnsy閱讀 700評論 0 1
  • if 語句(單一條件) if 語句 條件表達(dá)式可以是任何一種邏輯表達(dá)式士葫,如果表達(dá)式值為true,則執(zhí)行花括號里面的...
    小韋573304閱讀 218評論 0 0
  • 第一章 初識javaJAVA 第一講:什么是程序?:為了讓計算機執(zhí)行某些操作或解決某個問題而編寫的一系列有序指令的...
    人子日月幾點閱讀 525評論 0 1