1. 程式人生 > 實用技巧 >JavaSE筆記03流程控制

JavaSE筆記03流程控制

Java流程控制

1.順序結構

  1. java的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句往下執行。
  2. 順序結構是最簡單的演算法結構,它是任何一個演算法都離不開的一種基本演算法結構。

2. 選擇結構

1.if單選結構

語法:

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

小例子

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();

2.if雙選結構

語法

if(布林表示式){
    //如果布林表示式的值為true
}else{
    //如果布林表示式的值為false
}

小例子

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();

3.if多選結構

語法

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

小例子

Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();      
/*
if語句至多有1個else語句,else語句在所有的 else if 語句之前
if語句可以有若干個 else if 語句,它們必須在 else 語句之前
一旦其中一個else if 語句檢測為true,其他的else if 以及 else 語句都將跳過執行
*/
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();

4.巢狀的if結構

語法

if(布林表示式1){
    //如果布林表示式1的值為true執行程式碼
    if(布林表示式2){
        //如果布林表示式2的值為true執行程式碼
    }
}

5.switch多選擇結構

語法

switch(expression){
    case value:
        //語句
        break;//可選
    case value:
        //語句
        break;
        //可以有任意數量的case語句
    default :
        //語句
}

小例子

//switch匹配一個具體的值
char grade = 'C';

switch (grade){
    case 'A':
    	System.out.println("優秀");
    	break;//可選
    	//若沒有break,會發生case穿透現象
    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("未知等級");
}

從Java SE 7開始,switch支援字串String型別了,同時case標籤必須為字串常量或字面量

package com.kuang.Struch;

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

        String name = "娑娜";
        //JDk7的新特性,表示式結果是字串
        //字型的本質還是數字
        
        switch (name){
            case "娑娜" :
                System.out.println("大大大!");
                break;
            case "金克斯":
                System.out.println("一馬平川~");
                break;
            default:
                System.out.println("......");
        }
    }
}
1.IDEA反編譯

反編譯 java--->class(位元組碼檔案)------反編譯(IDEA自帶可以實現)

  1. 點選File--->選擇Project Structure...彈出一個視窗
  2. 選擇Project,往下看到Project complier output,有個檔案的地址,按地址找到檔案的.class檔案,拖進idea裡去會提示是否要反編譯,點確認就行了
2.反編譯後效果:
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)

package com.kuang.Struch;

public class SwitchDemo02 {
    public SwitchDemo02() {
    }

    public static void main(String[] args) {
        String name = "娑娜";
        byte var3 = -1;
        switch(name.hashCode()) {
        case 737835:
            if (name.equals("娑娜")) {
                var3 = 0;
            }
            break;
        case 36544341:
            if (name.equals("金克斯")) {
                var3 = 1;
            }
        }
        switch(var3) {
        case 0:
            System.out.println("大大大!");
            break;
        case 1:
            System.out.println("一馬平川~");
            break;
        default:
            System.out.println("......");
        }
    }
}

3.迴圈結構

1.while迴圈

//語法
while(布林表示式){
    //迴圈內容
}
//只要布林表示式為true,迴圈就會一直執行下去
//我們大多數情況下是會讓迴圈停下來的,我們需要一個讓表示式失效的方式來結束迴圈
//少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
//迴圈條件一直為true就會造成無限迴圈(死迴圈)

例子

package com.kuang.Struch;

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

public class WhileDemo02 {
    public static void main(String[] args) {
        //計算1+2+3+...+100=?
        int i = 0;
        int sum = 0;

        while (i <= 100){
            sum += i;
        }
        System.out.println(sum);//5050
    }
}

2.do...while迴圈

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

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

//語法
do{
    //程式碼語句
}while(布林表示式);

while和do...while的區別

  1. while先判斷後執行,do...while是先執行後判斷!
  2. do...while總是保證迴圈體會被至少執行一次,這是他們的主要差別。

例子

package com.kuang.Struch;

public class DoWhileDemo01 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;

        do {
            sum += i;
            i++;
        }while (i <= 100);

        System.out.println(sum);//5050
    }
}

While和do...while對比

package com.kuang.Struch;

public class DoWhileDemo02 {
    public static void main(String[] args) {
        int a = 0;
        while (a < 0){
            System.out.println(a);
            a++;
        }
        System.out.println("================");
        do {
            System.out.println(a);
            a++;
        }while (a < 0);
        //輸出結果為:
        //================
        //0
    }
}

3.for迴圈

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

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

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

例子

package com.kuang.Struch;

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迴圈結束!");
        System.out.println("====================");

        //初始化、條件判斷、迭代
        for (int i = 1; i <= 100; i++){//這裡可以使用快捷鍵:100.for  會直接跳出寫好的迴圈體!!!
            System.out.println(i);
        }
        System.out.println("for迴圈結束!");
        /*
        關於for迴圈有以下幾點說明:
        1.最先執行初始化步驟,可以宣告一種型別,但可以初始化一個或多個迴圈控制變數,也可以是空語句
        2.然後檢測布林表示式的值,如果為true執行迴圈體的內容,如果為false,迴圈停止,開始執行迴圈體後面的語句
        3.執行一次迴圈後,更新迴圈控制變數(迭代因子控制迴圈變數的增減)
        4.最後再次檢測布林表示式,迴圈執行上面的過程
         */
    }
}
經典例子
例子1
package com.kuang.Struch;

public class ForDemo02 {
    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){
                oddSum += i;//oddSum = oddSum + i;
            }else {
                evenSum += i;
            }
        }
        System.out.println("奇數的和:" + oddSum);//2500
        System.out.println("偶數的和:" + evenSum);//2550
    }
}

例子2
package com.kuang.Struch;

public class ForDemo03 {
    public static void main(String[] args) {
        //用for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個

        //計數器
        int count=0;

        for(int i = 1; i <= 1000; i++) {
            if (i % 5 == 0) {
                System.out.print(i + "\t");
                count++;
            }
            if (count == 3) {//換行,每滿3個數字就換行
                System.out.println();
                //System.out.println("\n");
                /*
                println:輸出完會換行
                print:輸出完不會換行
                 */
                count = 0;//換完清零,再重新計數
            }
        }
        /*執行結果:   5	10	15	
                      20	25	30	
                      35	40	45	
        */
    }
}
例子3
package com.kuang.Struch;

public class ForDemo04 {
    public static void main(String[] args) {
        //九九乘法表
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + (j * i) + "\t");
            }
            System.out.println();
        }
    }
}

4.增強型for迴圈

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

for(宣告語句 : 表示式){
    //程式碼句子
}

例子

package com.kuang.Struch;
//for與foreach對比
public class ForDemo05 {
    public static void main(String[] args) {

        int[] numbers = {10,20,30,40,50};//定義了一個數組

        for (int i = 0; i < 5; i++) {
            System.out.print(numbers[i] + "\t");
        }
        System.out.println("\n" + "===================");

        //遍歷陣列的元素
        for (int x:numbers) {
            System.out.print(x + "\t");
        }
    }
}

5.break和continue

break在任何迴圈語句的主體部分,均可用break控制迴圈流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break也在switch語句中使用)

例子

package com.kuang.Struch;

public class BreakDemo01 {
    public static void main(String[] args) {
        int i = 0;
        while (i < 100){
            i++;
            System.out.println(i);
            if(i == 30){
                break;
            }
        }
        System.out.println("hhh~");
        //執行結果:輸出到30後,停止迴圈,再輸出hhh
    }
}

continue語句用在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。

package com.kuang.Struch;

public class ContinueDemo01 {
    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");
            /*輸出結果:
            1	2	3	4	5	6	7	8	9	
            11	12	13	14	15	16	17	18	19	
            21	22	23	24	25	26	27	28	29
            ...	 */
        }
    }
}

6.練習

package com.kuang.Struch;

public class TestDemo {
    public static void main(String[] args) {
        //列印三角形,5行

        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();
            /*執行結果:
                *
               ***
              *****
             *******
            *********
           */
        }
    }
}