天天看點

15 java流程控制 _ 2 _結構__順序、選擇、循環

java流程控制 _ 2 _結構__順序、選擇、循環

順序結構

  1. java的基本結構就是順序結構,除非特别說明,否則就按照順序一句一句地執行。
  2. 順序結構是最簡單的算法結構
  3. 15 java流程控制 _ 2 _結構__順序、選擇、循環
  4. 語句與語句之間,框與框之間是按照從上而下的順序進行的,它是由若幹個依次執行的處理步驟組成的,

    它是任何一個算法都離不開的一種基本算法結構

選擇結構

if單選擇結構

  1. 我們很多時候需要去判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示。
  2. 文法:
if(布爾表達式){
    //如果布爾表達式為true将執行的語句
}      
package com.wlw.struct;

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args) {
        //if單選擇結構
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入:");
        String s = scanner.nextLine();
        //equals : 判斷字元串是否相等
        if(s.equals("Hello")){
            System.out.println("你輸入的是:"+s);
        }
        System.out.println("END");
        scanner.close();
    }
}      

if雙選擇結構

  1. 對于一個需求用一個if搞不定,我們需要兩個判斷,需要一個雙選擇結構,是以就有了if-else結構
  2. 文法:
if(布爾表達式){
    //如果布爾表達式為true将執行的語句
}else{
    //如果布爾表達式為false将執行的語句
}      
15 java流程控制 _ 2 _結構__順序、選擇、循環
package com.wlw.struct;

import java.util.Scanner;

public class IfDemo02 {
    public static void main(String[] args) {
        //考試分數大于60就及格,否則不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("請輸入你的分數:");
        int score = scanner.nextInt();

        if(score >= 60){
            System.out.println("及格");
        }else {
            System.out.println("不及格");
        }

        scanner.close();
    }
}      

if多選擇結構

  1. 對于一個需求,有很多種選擇,需要一個多選擇結構
  2. 文法:
if(布爾表達式1){
    //如果布爾表達式1為true将執行的語句
}else if(布爾表達式2){
    //如果布爾表達式2為true将執行的語句
}else if(布爾表達式3){
    //如果布爾表達式3為true将執行的語句
}else{
    //如果以上語句全為false将執行的語句
}      
package com.wlw.struct;

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        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結構

  1. 使用嵌套的if…else語句是合法的。也就是說你可以在另一個if或者else if語句中使用if或者else if語句.你可以像if語句一樣嵌套else if…else.
  2. 文法:
if(布爾表達式1){
    //如果布爾表達式1為true将執行的語句
    if(布爾表達式2){
         //如果布爾表達式2為true将執行的語句
    }
}      

switch多選擇結構

  1. 對于多選擇結構,還有一種方式是switch case語句
  2. switch語句判斷一個變量和一系列值中某個值是否相等,每個值稱為一個分支。
  3. switch語句中的變量類型可以是:byte、short、int、char、String(從javaSE7開始)
  4. case标簽必須是字元串常量 或 字面量。case具有***穿透*** 現象:如果case語句裡面沒有break;當比對到對應的value時,它也會把下面的case語句也輸出,直到最終結束,或遇到break;。(是以每一個case語句都要加上break;)
  5. 文法:
switch(expression){
    case value:
        //語句
        break;//可選(但最好加上)
    case value:
        //語句
        break;//可選(但最好加上)
        //可以有任意數量的case語句
    default://可選
        //語句
}      
package com.wlw.struct;

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

        switch (grade){
            case 'A':
                System.out.println("優秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("再接再勵");
                break;
            default:
                System.out.println("未知等級");
        }
    }
}      
package com.wlw.struct;

public class SwitchDemo02 {
    public static void main(String[] args) {
        String name = "大海";
        // jdk7 新特性,表達式結構支援字元串!!!
        //字元串的本質還是數字

        //反編譯: 我們寫的 java檔案 -----經編譯----> class檔案(位元組碼檔案,直接檢視是亂碼)
        //反編譯就是 将 class檔案(位元組碼檔案)-----反編譯---->我們能看懂的檔案(IDEA可以實作)
        /*過程:
        1.找到我們所寫檔案的class檔案的存放位址
        2.從檔案夾的層面直接将我們要檢視的class檔案複制到我們項目的目錄下
        3.輕按兩下檢視
         */
        switch (name){
            case "大海":
                System.out.println("大海");
                break;
            case "陸地":
                System.out.println("陸地");
                break;
            default:
                System.out.println("What are you 弄啥嘞");
        }

    }
}      

反編譯

我們寫的 java檔案 -----經編譯----> class檔案(位元組碼檔案,直接檢視是亂碼)
 反編譯就是 将 class檔案(位元組碼檔案)-----反編譯---->我們能看懂的檔案(IDEA可以實作)
 過程:

      1. 找到我們所寫檔案的class檔案的存放位址

   2.從檔案夾的層面直接将我們要檢視的class檔案複制到我們項目的目錄下      

3.輕按兩下檢視

15 java流程控制 _ 2 _結構__順序、選擇、循環
15 java流程控制 _ 2 _結構__順序、選擇、循環
15 java流程控制 _ 2 _結構__順序、選擇、循環
15 java流程控制 _ 2 _結構__順序、選擇、循環

循環結構

while循環

  1. 結構
while(布爾表達式){
    //循環内容
}      
  1. 隻要布爾表達式為true,循環就會一直執行下去。
  2. 我們大多數情況是會讓循環停止下來的,我們需要一個讓 表達式失效 的方式來結束循環。
  3. 少部分情況需要循環一直執行, 比如伺服器的請求響應監聽等。
  4. 循環條件一直為true就會造成無限循環[死循環] ,我們正常的業務程式設計中應該盡量避免死循環。會影響程式性能或者造成程式卡死奔潰!
  5. 思考:計算1 +2+3+…+100=?
package com.wlw.struct;

public class WhileDemo01 {
    public static void main(String[] args) {
        //輸出1~100
        int i = 0;
        while (i < 100){
            i++;
            System.out.println(i);
        }
    }
}      
package com.wlw.struct;

public class WhileDemo02 {
    public static void main(String[] args) {
        //死循環
        while (true){
            //等待客戶連接配接
            //定時檢查
            //.......
        }
    }
}      
package com.wlw.struct;

public class WhileDemo03 {
    public static void main(String[] args) {
        //思考:計算1 +2+3+...+100=?
        int i = 0;
        int sum = 0;
        while (i < 100){
            i++;
            sum = sum + i;
        }
       /* while (i <= 100){
            sum = sum + i;
            i++;
        }*/
        System.out.println(sum);
    }
}      

do…while循環

  1. 結構:
do{
    //代碼語句
}while(布爾表達式);      
  1. 對于while語句而言,如果不滿足條件,則不能進入循環。但有時我們需要即使不滿足條件,也要至少執行一次
  2. do…while循環與while循環相似,不同的是do…while循環至少會執行一次
  3. do…while循環與while循環的差別:
  1. while 是先判斷後執行,do…while是先執行後判斷

    2.do…while總是保證循環體至少會被執行一次!,這是主要差別

package com.wlw.struct;

public class DoWhileDemo01 {
  public static void main(String[] args) {
      //思考:計算1 +2+3+...+100=?
      int i = 0;
      int sum = 0;
      
    /*  do {
          i++;
          sum  = sum + i;
      }while (i < 100);
      */
      
      do {
          sum = sum + i;
          i++;
      }while (i <= 100);

      System.out.println(sum);
  }
}      
package com.wlw.struct;

public class DoWhileDemo02 {
    public static void main(String[] args) {
        // while   do...while
        int a = 0;

        while (a < 0){
            System.out.println(a); //不會執行
            a++; //不會執行
        }

        System.out.println("======================="); //執行
        do {
            System.out.println(a); // 輸出 0
            a++;
        }while (a < 0);
    }
}      

for循環*

  1. 結構:
for(初始值 ; 布爾表達式 ; 更新){
    //代碼語句(循環體)
}      
  1. 雖然所有循環結構都可以用while或者do…while表示,但Java提供了另一種語句一for循環,使一些循環結構變得更加簡單。
  2. for循環語句是支援疊代的一種通用結構,是最有效、最靈活的循環結構。
  3. for循環執行的次數是在執行前就确定的。文法格式如上:
package com.wlw.struct;

public class ForDemo01 {
  public static void main(String[] args) {
      int a = 1;//初始化條件
      while (a <= 100){ //條件判斷
          System.out.println(a);//循環體
          a += 2; //疊代
      }
      System.out.println("while 循環結束!");

      //所有的for循環都能用while來代替,但是for循環更高效
      //  初始化     //條件判斷   //疊代
      for (int i = 0 ; i <= 100 ; i++){
          System.out.println(i);//循環體
      }
      System.out.println("for 循環結束!");

      /*關于for循環有以下幾點說明:
     最先執行初始化步驟(int i = 0)。可以聲明一種類型,但可初始化一個或多個留環控制變量,也可以是空語句。
     然後,檢測布爾表達式(i <= 100)的值。如果為true,循環體被執行。
     如果為false, 循環終止,開始執行着循環體後面的語句。
     執行一次循環後,更新循環控制變量(i++)(疊代因子控制循環變量的增減)
     再次檢測布爾表達式。循環執行上面的過程。
      */
      //死循環
      for (;;){
          
      }
  }
}      
package com.wlw.struct;

public class FoeDemo02 {
    public static void main(String[] args) {
        //計算 0~100 之間的奇數 和偶數的和

        int oddSum = 0;//奇數
        int evenSum = 0;

        for (int i = 0; i <= 100; i++) {
            if(i % 2 == 0){ //偶數
                evenSum += i; // evenSum = evenSum + i;
            }else {
                oddSum += i; //oddSum = oddSum + i;
            }
        }
        System.out.println("偶數和evenSum:"+evenSum);
        System.out.println("奇數和oddSum:"+oddSum);
    }
}      
package com.wlw.struct;

public class FoeDemo03 {
    public static void main(String[] args) {
        //用 while 或for循環輸出 1~ 1000 之間能被5整除的數,并且每行輸出三個
        for (int i = 1; i <= 1000; i++) {
            if(i % 5 == 0){
                System.out.print(i + "\t");
            }
            if(i % (5*3) == 0){//換行
                System.out.println();
                //System.out.print("\n");
            }
        }
    }
}      

15 java流程控制 _ 2 _結構__順序、選擇、循環
package com.wlw.struct;

public class ForDemo04 {
    public static void main(String[] args) {
        //列印九九乘法表

        //1.先列印 1 開頭的 (即第一列)
        //2.外面套一個循環 把其他幾列也列印出來(此時每一列都有九行)
        //3.去掉重複的  i <= 9 ----> i <= j
        //4.将j 與 i 的位置互換,這樣輸出結果看起來更順 (i 是代表第一個數 j是代表第二個數)
        //  并增加換行語句
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                //System.out.print(j+ "*" + i + "="+ (j*i) + "\t");
                System.out.print(i + "*" + j + "="+ (i*j) + "\t");
            }
            System.out.println();//這一行列印結束,換行
        }

    }
}      

增強for循環

  1. 結構
for(聲明語句 : 表達式){
  //代碼句子
}      
  1. 先做個了解,之後數組重點使用
  2. Java5 引入了一種主要用于數組或集合的增強型for循環。
  3. 聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型比對。其作用域限定在循環語句塊,其值與此時數組元素的值相等。
  4. 表達式:表達式是要通路的數組名,或者是傳回值為數組的方法。
package com.wlw.struct;

public class ForDemo05 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50};

        //增強for循環 就是周遊數組的元素
        for(int x : numbers){
            System.out.println(x);
        }
        System.out.println("================");

        for(int i = 0; i < numbers.length; i++){
            System.out.println(numbers[i]);
        }
    }
}