一篇文章帶你瞭解JAVA結構化編程詳情

1.什麼是結構化編程

編程中隻使用三大結構

不能使用goto語句

1972年美國科學傢,發表論文證明所有的程序流程,隻需要三大結構完成。

2.為什麼要使用結構化編程?

把代碼分成一個一個的代碼塊

極大的提高瞭代碼的可 讀性

3.三大結構

A. 循環結構

  • 單線程(一個執行序列)
  • 代碼總是執行上一行,再執行下一行
  • 在順序結構中,要提防不小心產生的空語句
//空語句實例:
public class BanchTest {
    public static void main(String[] args) {
        int i;
        for(i=0;i<5;i++);//這裡的分號產生瞭空語句
        {   
        System.out.print(i);
        }
    }
}
//運行結果為:
//5
//正確例子:
public class BanchTest {
    public static void main(String[] args) {
        int i;
        for(i=0;i<5;i++)//註意這裡沒分號
        {
            System.out.print(i);
        }
    }
}
//運行結果
//01234

一行代碼:

  • 在JAVA中分號是行的分隔符。
  • 在J S語言中分號、回車都是行的分隔符
  • 在VB語言中,回車是分隔符

註釋:隻要回車是分隔符、都需要右續行符

B. 分支結構

  • 單分支結構(if)
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int age = 19;
        if(age>=18) {//註意這裡的判斷題的大括號不要省略,除非執行體和判別式在同一行
            System.out.println("成年");
        }
    }
}
  • 雙分支結構(if…else..)
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int age = 1;
        if(age>=18) {//符合判別表達式執行體
            System.out.println("成年");
        }else {//不復合判別表達式執行體
            System.out.println("未成年");
        }
    }
}
  • 多分支結構

a.多選一的結構(多個分支結構、隻有一個被執行)

使用else if 比單分支滿足條件的做法,有更高的效率,所有的分支,同時隻會執行一個

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int age = 37;
        if(age<6) {
            System.out.println("幼兒");
        }
        else if(age<18) {
            System.out.println("少年");
        }
        else if(age<60) {
            System.out.println("成年");
        }
        else {
            System.out.println("老年人");
        }
    }
}

b.多選多的結構 (多個分支結構、有多個被同時執行)(switch)

  • 格式:switch(key) 其中key支持的類型有:

1. int類型

2.可以自動升級為int的類型(byte、short、char、Integer)

3. enum(枚舉類型)

4.在JDK8之後還支持string類型

  • 在沒有break時會全部被執行
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=1;
        switch(key) {
        case 1:
            //這個條件下執行的部分
            System.out.println("成績優秀");
        case 2:
            System.out.println("成績良好");
        case 3:
            System.out.println("成績一般");
        default:
            //default等同於else,在switch中用default
            System.out.println("成績不良");
        }
    }

/*運行結果為:
成績優秀
成績良好
成績一般
成績不良*/

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=2;
        switch(key) {
        case 1:
            //這個條件下執行的部分
            System.out.println("成績優秀");
        case 2:
            System.out.println("成績良好");
        case 3:
            System.out.println("成績一般");
        default:
            //default等同於else,在switch中用default
            System.out.println("成績不良");
        }
    }
}

/*key值不同值下的運行結果:
成績良好
成績一般
成績不良
*/

  • 在break之後,選中哪個就執行哪個(有多選一的效果)
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=1;
        switch(key) {
        case 1:
            //這個條件下執行的部分
            System.out.println("成績優秀");
            break;//關閉
        case 2:
            System.out.println("成績良好");
            break;
        case 3:
            System.out.println("成績一般");
            break;
        default:
            //default等同於else,在switch中用default
            System.out.println("成績不良");
        }
    }
}
  • 跑穿(沒有加break時,可以進入多個分支),隻要以上條件都滿足時,我都執行
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=2;
        switch(key) {
        case 1:
            //這個條件下執行的部分
            System.out.println("成績優秀");
        case 2:
            System.out.println("成績良好");
        case 3:
            System.out.println("成績一般");
        default:
            //default等同於else,在switch中用default
            System.out.println("成績不良");
            System.out.println("繼續加油");//滿足上面的四個條件,不管key的值是多少,此代碼都執行。
        }
    }
}

註釋:設計跑穿就是為瞭支持多對多的關系。

C.重復結構

  • do while(until)
  • 先執行循環,再判別。
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int i = 0;
    int count=5;
            do {
                System.out.println(i);
                i++;//循環變量自加
            }
            while(i<count);
    }
}
  • while
  • 先判別,再執行循環
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int i = 0;
    int count=5;
            while(i<count) {
                System.out.println(i);
                i++;//循環變量自加
            }
    }
}

註釋:while循環要比do..while循環好多瞭,因為while循環的可讀性要比後者好太多。

  • for
  • (continue )跳出本次循環
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int count=5;
    for (int i = 0; i < count; i++) {
        if(i==3)continue;//跳出本次循環,跳到右邊距離最近的}的左邊
        System.out.print(i);
    }     
    }
}
/*運行結果
0124
*/
  • (break)跳出本層循環
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int count=5;
    for (int i = 0; i < count; i++) {
        if(i==3) break;//跳出本次循環,跳到右邊距離最近的}的右邊
        System.out.print(i);
    }     
    }
}
/*運行結果
012
*/
  • (return) 跳出函數
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int count=5;
    for (int i = 0; i < count; i++) {
        if(i==3) return;//跳出本函數
        System.out.print(i);
    }     
    }
}
/*運行結果
012
*/
  • forEach(遍歷集合)
  • for循環和while循環的區別:
  • for循環。定長循環,依靠固定循環次數作為結束條件。
  • while循環。標志性循環,依靠標志來結束循環(文件是否讀到最後一行,用戶的輸入是否結束)。

4.函數(在JAVA中叫方法)

面向對象的語言叫方法

面向過程的語言叫函數

在JAVA中沒有函數這麼一說,隻有方法一說。實際上方法就是函數,函數就是方法,隻是在不同的語言不同的稱呼而已。有class聲明的就是類。類就是對一類事物的聲明,在JAVA中函數就是方法,就是後面帶有()的。類隻是聲明,對象才是真實存在的可以幹活的東西,所有的方法(也就是函數)都需要用對象去調用(不包括靜態的static)

  • 什麼是函數(函數,子程序,過程)

函數是一段可以復用的子程序。

函數(function):有返回值(在C語言中void表示沒有返回值)

過程(procedure):無返回值

  • 為什麼要使用函數

代碼的復用,提高瞭效率

  • 什麼時候寫一個函數
  • 復用

在寫某個代碼時,發現這個代碼似曾相識(寫過)

  • 分割邏輯

不應該超過50行

一個方法最好隻能有一個功能(單一功能原則)

功能簡單更加利於復用

  • 函數的定義
    • 函數定義的區域:類體以內,方法以外。
    • 一模一樣(同名同參)的函數隻能調用一次
    • 方法定義有7個組成要素:
public static void main (String[] args) throws Exception {
​
}

1.權限修飾符 public

2.static/final/abatract

3.返回類型 void

4.方法(函數)名稱 main

5.形式參數列表 (String[] args)

6.異常列表 throws Exception

7.{ } 方法體

註釋:3 4 5 是必須的

//兩個例子
void test1 (){}
abstaract void test1();//抽象方法
  • 函數如何返回返回值
    • 隻要函數聲明一個不是void返回類型,所有分支必然需要一個返回值。
    • 返回值通過return語句進行返回的,而且數據類型必須和方法聲明的返回類型匹配。
  • 函數 的調用
    • 如何調用一個方法

1.可以多次調用

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        new BanchTest().test1();
}
        void test1 (){
            test2();
            test2();
            test2();
        } 
        void test2() {
            System.out.println("JAVA使我快樂");
        }
    }

2.至少在現在的時候方法(函數)的實參(調用的時候叫實參)和形參(定義的時候叫形參)必須一致

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        new BanchTest().test1();
}
        void test1 (){
            test2(1);//括號裡面的是實參
            test2(2);
            test2(3);
        } 
        void test2(int order) {//函數定義時叫形參
            System.out.println("JAVA使我快樂"+order);
        }
    }

運行結果
/*
JAVA使我快樂1
JAVA使我快樂2
JAVA使我快樂3
*/

  • 函數可以直接或間接的調用自己

遞歸

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: