天天看點

Java學習記錄 Day3(選擇結構、循環結構)

文章目錄

  • ​​Day 3​​
  • ​​程式的執行流程​​
  • ​​Scanner​​
  • ​​if(選擇結構)​​
  • ​​switch case(選擇結構)​​
  • ​​for(循環結構)​​
  • ​​for循環的經典算法(水仙花數,星星三角形,九九乘法表)​​
  • ​​while(循環結構)​​
  • ​​do while(循環結構)​​
  • ​​三種循環結構的差別​​
  • ​​break​​
  • ​​continue​​

Day 3

2019年3月30日。

這是我學習Java的第三天。

這一天,我學到了以下的知識。

程式的執行流程

在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。

也就是說程式的流程對運作結果有直接的影響。是以,我們必須清楚每條語句的執行流程。

而且,很多時候我們要通過控制語句的執行順序來實作我們要完成的功能。

程式的執行流程分為三類:

  1. 順序結構:代碼從上往下一行一行去執行。
  2. 選擇結構:也被稱為分支結構。

    選擇結構有特定的文法規則,代碼要執行具體的邏輯運算進行判斷,邏輯運算的結果有兩個,是以産生選擇,按照不同的選擇執行不同的代碼。

  3. 循環結構:循環語句可以在滿足循環條件的情況下,反複執行某一段代碼,這段被重複執行的代碼被稱為循環體語句,當反複執行這個循環體時,需要在合适的時候把循環判斷條件修改為false,進而結束循環,否則循環将一直執行下去,形成死循環。

Scanner

Java提供的類,可以同來擷取從鍵盤中輸入的資料。

使用步驟分為以下三步:

  1. 導入程式包:​

    ​import java.util.Scanner;​

  2. 建立鍵盤錄入對象:​

    ​Scanner a = new Scanner(System.in);​

  3. 錄入輸入的資料:​

    ​int b = a.nextInt();​

if(選擇結構)

if語句是條件選擇語句,具有以下三種格式。

格式一:if

if(比較表達式或者是boolean類型的值) {
        語句體;
    }
    /*執行流程
    先計算比較表達式的值,看其傳回值是true還是false。
        如果是true,就執行語句體;
        如果是false,就不執行語句體;*/      

格式二:if-else

if(比較表達式) {
        語句體1;
      }else {
        語句體2;
      }

  //注意事項:else後面是沒有比較表達式的,隻有if後面有。
  /*執行流程
  首先計算比較表達式的值,看其傳回值是true還是false。
  如果是true,就執行語句體1;
  如果是false,就執行語句體2;*/      

格式三:if-else if-else

if(比較表達式1) {
            語句體1;
        }else if(比較表達式2) {
            語句體2;
        }else if(比較表達式3) {
            語句體3;
        }
        ...
        else {
            語句體n+1;
        }
    //注意事項: 當隻要有一個條件滿足時,if語句結束。else是可以省略,但是不建議省略。
    /*執行流程
    首先計算比較表達式1看其傳回值是true還是false,
    如果是true,就執行語句體1,if語句結束。
    如果是false,接着計算比較表達式2看其傳回值是true還是false,
    
    如果是true,就執行語句體2,if語句結束。
    如果是false,接着計算比較表達式3看其傳回值是true還是false,
    ...
    
    如果都是false,就執行語句體n+1。*/      

if和三元表達式的差別:

  1. 三元表達式寫出來的,if-else一定寫的出來。
  2. if-else寫出來的,三元表達式不一定寫出來。

switch case(選擇結構)

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

格式如下:

switch語句的格式
        switch(表達式){
            case 值1:
                語句體1;
                break;
            case 值2:
                語句體2;
                break;
            case 值3:
                語句體3;
                break;
            ....
            default:    
                語句體n+1;
                break;
        }
    /*  switch語句的格式解釋
    (1):switch表示這是switch語句
        表達式的取值:byte,short,int,char
        JDK5以後可以是枚舉(什麼是枚舉,以後再講)
        JDK7以後可以是String
    (2):case後面跟的是要和表達式進行比較的值
    (3):語句體部分可以是一條或多條語句
    (4):break表示中斷,結束的意思,可以結束switch語句
    (5):default語句表示所有情況都不比對的時候,就執行該處的内容,和if語句的else相似*/
    /*執行流程
    先計算表達式的值
    然後和case後面的比對,如果比對成功就執行對應的語句,遇到break就會結束,否則執行default控制的語句*/      

面試題:byte可以作為switch的表達式嗎?

long可以作為switch的表達式嗎?

String可以作為switch的表達式嗎?

switch 語句中的變量類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支援字元串 String 類型了,同時 case 标簽必須為字元串常量或字面量。

是以,byte、String均可以作為switch的表達式,而long不可以作為switch的表達式。

for(循環結構)

for循環執行的次數是在執行前就确定的。

格式如下:

for(初始化表達式語句;判斷條件語句;控制條件語句) {
        循環體語句;
    }
    //注意事項:初始化表達式語句隻執行一次
    /*執行流程:
    a:執行初始化表達式語句
    b:執行判斷條件語句,看其傳回值是true還是false
        如果是true,就繼續執行
        如果是false,就結束循環
    c:執行循環體語句;
    d:執行控制條件語句
    e:回到B繼續。*/
    //循環嵌套之後,外層循環控制行數,裡層循環控制列數      

for循環的經典算法(水仙花數,星星三角形,九九乘法表)

  • 水仙花數

    所謂的水仙花數是指一個三位數,其各位數字的立方和等于該數本身。

    舉例:153就是一個水仙花數。

    153 = 111 + 555 + 333 = 1 + 125 + 27 = 153

    代碼如下:

public class FlowerNumber {
                public static void main(String args[]){
                    int a;
                    int b;
                    int c;
                    for (int i = 100 ; i <= 999 ; i++){
                       /*for (a = 1 ; a <= 9 ; a ++){
                            for (b = 0 ; b <= 9 ; b++){
                                for (c = 0 ; c <= 9 ; c++){
                                    if ((a * a * a) + (b * b * b) + (c * c * c) == a * 100 + b * 10 + c && i == a * 100 + b * 10 + c){
                                        System.out.println(a * 100 + b * 10 + c);
                                    }
                                }
                            }
                        }*//* 方法一  循環嵌套法*/
                       /*a = (i / 100);
                       b = (i % 100) / 10;
                       c = (i % 10);
                       if ((a * a * a) + (b * b * b) + (c * c * c) == a * 100 + b * 10 + c){
                           System.out.println(i);
                       }*//*方法二 取位數法*/
                    }
                }
            }      

運作效果:

Java學習記錄 Day3(選擇結構、循環結構)
  • 星星三角形

    用*繪制一個直角三角形(5x5)。

    代碼如下:

public class PaintStar {
        public static void main(String args[]){
            for (int i = 0 ; i < 5 ; i++){
                for (int j = 0 ; j <= i ; j++){
                    System.out.print("*");
                }
                System.out.println();
            }
        } }      

運作效果:

Java學習記錄 Day3(選擇結構、循環結構)
  • 九九乘法表

    繪制一個九九乘法表。

    代碼如下:

public class chengfabiao {
            public static void main(String args[]){
                for (int i = 1 ; i < 10 ; i++){
                    for (int j = 1 ; j <= i ; j++){
                        System.out.print(j + "*" + i + "=" + (j * i) + "\t");
                    }
                    System.out.println();
                }
            }
        }      

運作效果:

Java學習記錄 Day3(選擇結構、循環結構)

while(循環結構)

while是最基本的循環。

格式為:

;
            while(判斷條件語句) {
                 循環體語句;
                 控制條件語句;
           }
    /*執行流程:
    a:執行初始化條件語句;
    b:執行判斷條件語句,看其傳回值是true還是false
        如果是true,就繼續執行
        如果是false,就結束循環
    c:執行循環體語句;
    d:執行控制條件語句
    e:回到b繼續。*/      

do while(循環結構)

對于 while 語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。

do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。

;
            do {
                循環體語句;
                控制條件語句;
            }while(判斷條件語句);
    /*執行流程:
    a:執行初始化條件語句;
    b:執行循環體語句;
    c:執行控制條件語句;
    d:執行判斷條件語句,看其傳回值是true還是false
        如果是true,就繼續執行
        如果是false,就結束循環
    e:回到b繼續。*/      

三種循環結構的差別

  1. do…while循環至少執行一次循環體。

    而for,while循環必須先判斷條件是否成立,然後決定是否執行循環體語句。

  2. A: 如果你想在循環結束後,繼續使用控制條件的那個變量,用while循環,否則用for循環。不知道用for循環。

    因為變量及早的從記憶體中消失,可以提高記憶體的使用效率。

    B:建議優先考慮for循環,然後是while循環 ,最後是do…while循環。

break

中斷循環。可以用在Switch語句,也可以用在for,while循環中,用來結束循環。若離開了使用場景(switch,for,while)則沒有意義。如果有循環嵌套,break影響的是最近的循環。

例題:試判斷輸出結果

for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
    if (i == j) {
    break;
    }
    System.out.println("i=" + i + ", j=" + j);
    }
    }      

解:①結果:i=1, j=0

i=2, j=0

i=2, j=1

②(1)第一次外層for循環:i=0,因為0<3,是以執行内層的for循環。

第一次内層for循環:i=0,j=0,因為0 == 0,是以結束循環。

(2)第二次外層for循環:i=1,因為1<3,是以執行内層的for循環。

第一次内層for循環:i=1,j=0,因為1!=0,是以輸出i=1,j=0。

第二次内層for循環:i=1,j=1,因為1 == 0,是以結束循環。

(3)第三次外層for循環:i=2,因為2<3,是以執行内層的for循環。

第一次内層for循環:i=2,j=0,因為2!=0,是以輸出i=2,j=0。

第二次内層for循環:i=2,j=1,因為2!=1,是以輸出i=2,j=1。

第三次内層for循環:i=2,j=2,因為2==2,是以結束循環。

(4)第四次外層for循環:i=3,因為3=3,是以結束循環。

continue

用在循環場景當中,可以跳過部分循環而不終端,離開循環場景後無意義。

for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
    if (i == j) {
    continue;
    }
    System.out.println("i=" + i + ", j=" + j);
    }
    }