一篇文章帶你瞭解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的更多內容!