1. 程式人生 > 實用技巧 >Day03-Java流程控制基礎階段

Day03-Java流程控制基礎階段

目錄

Scanner物件

  • 之前我們學的基本語法中我們並沒有實現程式和人的互動,但是Java給我們提供了這樣一個工具類,為們可以獲取使用者的輸入。java.util.Scanner 是Java5的新特徵,我們可以通過Scanner類來獲取使用者的輸入

  • 基本語法

    Scanner s = new Scanner(System.in);
    
  • 通過Scanner類的next()與nextLine()方法獲取輸入的字串

    ,在讀取前我們一般需要使用hasNext()與hasNextLine()判斷是否還有輸入的資料

  • next():

    • 1.一定要讀取到有效字元後才可以結束輸入
    • 2.對輸入有效字元之前遇到的空白,next()方法會自動將其去掉
    • 3.只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符
    • 4.next()不能得到帶有空格的字串

  • nextLine():

    • 1.以Enter為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元
    • 2.可以獲得空白

  • 凡是屬於IO流的類如果不關閉會一直佔用資源,要養成好習慣,用完就關掉

    sacnner.close();
    
  • 小案例:我們可以輸入多個數字,並求其總和與平均數,每輸入一個數字用回車確認,通過輸入非數字來結束並輸出執行結果;

    public class Demo {
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            double sum = 0;
            int count = 0;
            System.out.println("請輸入數字:");
            whlie(scanner.hasNextDouble()){
                double d = scanner.nextDouble();
                count++;
                sum = sum + x;
                System.out.println("你輸入了第"+count+"個數據,當前結果為sum = "+sum);
            }
            System.out.println(count+"個數的和為"+sum);
            System.out.println(count+""+(sum/count));
            
            scanner.close();
        }
        
    }
    

順序結構

  • JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行
  • 順序結構是最簡單的演算法結構
  • 語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本演算法結構

選擇結構

if單選擇結構

  • 我們很多時候要去判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示

  • 語法結構

    if(布林表示式){
        //如果布林表示式為true將執行的語句
    }
    

if雙選擇結構

  • 現在有個需求,公司要收購一個軟體,成功了,給人支付100w元,失敗了,自己找人開發。這樣的需求用一個if就搞不定了,我們需要有兩個判斷,需要一個雙選擇結構,所以就有了if-else結構

  • 語法結構:

    if(布林表示式){
        //如果布林表示式的值為true
    }
    else{
        //如果布林表示式的值為false
    }
    
  • 上述案例程式碼如下

    public class IfDemo{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            
            String s = scanner.nextLine();
            if(s.equals("true")){
                System.out.println("收購成功,每人獎勵100W!");
            }else{
                System.out.println("收購失敗,自主開發軟體");
            }
            
            scanner.close();
        }
    }
    

if多選擇結構

  • 在生活中我們很多時候的選擇也不僅僅只有兩個,所以我們需要一個多選擇結構來處理這類問題

  • 語法結構:

    if(布林表示式1){
        //如果布林表示式1的值為true執行程式碼
    }else if(布林表示式2){
        //如果布林表示式2的值為true執行程式碼
    }else if(布林表示式3){
        //如果布林表示式3的值為true執行程式碼
    }else{
        //如果以上布林表示式都不為true執行程式碼
    }
    
  • 案例

    public class IfDemo03 {
        public static void main(String[] args) {
            //考試分數大於60分及格,小於60不及格
            Scanner scanner = new Scanner(System.in);
            System.out.println("請輸入成績:");
            int score = scanner.nextInt();
            if (score==100){
                System.out.println("恭喜滿分");
            }else if(score<100 && score>=90){
                System.out.println("a");
            }else if(score<90 && score>=80){
                System.out.println("b");
            }else if(score<80 && score>=70){
                System.out.println("c");
            }else if(score<70 && score>=60){
                System.out.println("d");
            }else if(score<60 && score>=0){
                System.out.println("不及格");
            }else{
                System.out.println("成績不合法");
            }
            scanner.close();
        }
    }
    

巢狀的if結構

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

  • 語法結構

    if(布林表示式1){
        //如果布林表示式1的值為true執行程式碼
        if(布林表示式2){
            //如果布林表示式2的值為true執行程式碼
        }
    }
    
  • 思考?我們需要尋找一個數,在1--100之間

switch多選擇結構

  • 多選擇結構還有一個實現方式就是switch case語句

  • switch case語句判斷一個變數與一系列值中某一個值是否相等,每一個值稱為一個分支

  • 語法結構

    switch(expression){
        case value:
            //語句
            break;//可選
        case value:
            //語句
            break;
        //你可以有任意數量的case語句
        default://可選
            //語句
    }
    
  • switch語句中的變數型別可以是:

    • byte、short、int或者char
    • 從java se 7開始switch支援字串String型別了
    • 同時case標籤必須為字串常量或字面量

迴圈結構

while迴圈

  • while是最基本的迴圈

  • 語法結構

    while(布林表示式){
        //迴圈內容
    }
    
  • 只要布林表示式為true,迴圈就會一直執行下去

  • 我們大多數情況下是會讓迴圈停止下來的,我們需要一個讓表示式失效的方式來結束迴圈

  • 少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等

  • 迴圈條件一直為true就會造成無限迴圈[死迴圈],我們正常的業務程式設計中應該儘量避免死迴圈。會影響程式效能或者造成程式卡死崩潰!

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

    public class WhileDemo{
        public static void main(String[] args){
            int sum = 0;
            int count = 1;
            while(count<=100){
                sum = sum + count;
                count++;
            }
            System.out.println(sum);
        }
    }
    

do...while迴圈

  • 對於while語句而言,如果不滿足條件,則不能進入迴圈。但有時候我們需要即使不滿足條件也至少迴圈一次

  • do......while迴圈和while迴圈相似,不同的是,do.....while迴圈至少會執行一次。

  • 語法格式

    do{
        //程式碼語句
    }while(布林表示式);
    
  • while和do...while的區別:

    • while先判斷後執行,dowhile是先執行後判斷!
    • dowhile總是保證迴圈體會被至少執行一次

for迴圈

  • 雖然所有迴圈結構都可以用while或者do......while表示,但JAVA提供了另一種語句——for迴圈,使得一些迴圈結構變得更加簡單

  • for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構

  • for迴圈執行的次數實在執行前就確定的,語法格式如下:

    for(初始化;布林表示式;更新){
        //程式碼語句
    }
    

練習

  • 練習1:計算0到100之間的奇數和偶數的和

    public class ForDemo01 {
        public static void main(String[] args) {
            int sum1 = 0;
            int sum2 = 0;
            for (int count = 1;count<=100;count++){
                if (count%2==0){
                    sum1 = sum1+count;
                }else{
                    sum2 = sum2+count;
                }
            }
            System.out.println("偶數的和為:"+sum1);
            System.out.println("奇數的和為:"+sum2);
        }
    }
    
  • 練習2:用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個

    public class ForDemo02 {
        public static void main(String[] args) {
            int flag = 0;
            for (int count = 1;count<=1000;count++){
                if (count%5==0){
                    System.out.print(count+"\t");
                    flag++;
                    if(flag==3){
                        System.out.println();
                        flag = 0;
                    }
                }
            }
        }
    }
    
  • 練習3:列印九九乘法表

    public class ForDemo03 {
        public static void main(String[] args) {
            for (int i = 1;i<=9;i++){
                for (int j = 1;i>=j;j++){
                    System.out.print(i+" * "+j+" = "+(i*j)+"\t");
                }
                System.out.println();
            }
        }
    }
    
  • 練習4:列印三角形

    public class TestDemo {
        //列印三角形   5行
        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();
            }
        }
    }
    
    • 拓展:列印菱形

      public class TestDemo {
          //列印三角形   5行
          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();
              }
              for (int i = 1;i<=7;i++){
                  for (int j =1;j<i;j++){
                      System.out.print(" ");
                  }
                  for (int j=7;j>i;j--){
                      System.out.print("*");
                  }
                  for (int j=6;j>i;j--){
                      System.out.print("*");
                  }
                  System.out.println();
              }
          }
      }
      

在Java5中引入了一種主要用於陣列的增強型for迴圈

  • 暫時瞭解,陣列之後才會重點使用

  • Java5引入了一種主要用於陣列或集合的增強型for迴圈

  • Java增強for迴圈語法格式如下:

    for(宣告語句:表示式){
        //程式碼句子
    }
    
  • 宣告語句: 宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等

  • 表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法

break continue

  • break在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句(break語句也在switch語句中使用)
  • continue語句用在迴圈語句中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判斷
  • 關於goto關鍵字
    • goto關鍵字很早就在程式設計語言中出現,儘管goto仍是Java的一個保留字,但並未在語言中得到正式使用;Java沒有goto,然而,在break和continue這兩個關鍵字的身上,我們仍然能看出一些goto的影子---帶標籤的break和continue
    • "標籤"是指後面跟一個冒號的識別符號,例如:label:
    • 對Java來說唯一用到標籤的地方是在迴圈語句之前,而在迴圈之前設定標籤的唯一理由是:我們希望在其中巢狀另一個迴圈,由於break和continue關鍵字通常只中斷當前迴圈,但若隨同標籤使用,它們就會中斷到存在標籤的地方