Java基础篇(03):流程控制语句,和算法应用
本文源碼:GitHub·點這里 || GitEE·點這里
一、分支語句
流程控制語句對任何一門編程語言都是非常重要的,Java中基于流程控制程序執(zhí)行的不同步驟和代碼塊。
1、IF條件
IF條件語句會根據(jù)不同的判斷條件執(zhí)行不同的語句,if后括號內(nèi)的條件是否成立關(guān)鍵步驟,IF條件的判斷結(jié)果必然要是true或false。IF…Else語句則是滿足IF條件,就執(zhí)行相應(yīng)代碼塊,否則就執(zhí)行Elase代碼塊。
public class Process01 {public static void main(String[] args) {// 演示:Node01if (compare01(40,30)){System.out.println("40>30:true");} else {System.out.println("40>30:false");}// 演示:Node02if (compare01(10,20) && compare01(20,30)){System.out.println("條件成立");} else {System.out.println("條件不成立");}// 演示:Node03if (compare01(20,10) || compare01(20,30)){System.out.println("條件成立");} else {System.out.println("條件不成立");}// 演示:Node04if(compare02(1,1))if(compare02(2,2))System.out.println("Running...");// 演示:Node05if(compare01(1,2))if(compare01(5,3)){System.out.println("5>3");}}private static boolean compare01 (int num1,int num2){System.out.println("判斷:num1="+num1+";num2="+num2);return num1 > num2 ;}private static boolean compare02 (int num1,int num2){System.out.println("判斷:num1="+num1+";num2="+num2);return num1 == num2 ;} }節(jié)點案例,測試結(jié)果描述:
- Node01:如果if條件不成立,則執(zhí)行else流程或者結(jié)束;
- Node02:邏輯且判斷,任何條件不成立,則直接結(jié)束;
- Node03:邏輯或判斷,任何條件成立,則直接進(jìn)入分支;
- Node04:IF的格式,可以去掉{},后續(xù)語句會作為分支;
- Node05:IF語句面試題,不會輸出任何內(nèi)容,第二個語句作為分支;
注意:在流程控制語句中必須使用大括號,即使只有一行代碼,避免采用單行的編碼方式,這是基礎(chǔ)規(guī)范。在上面的測試節(jié)點4和5,代碼看著就感覺扎心。
2、IF-Else-IF條件
Else…IF分支語句用于多種情況進(jìn)行的判斷處理,直到分支判斷條件成功,執(zhí)行分支模塊代碼,如果沒有else條件,可以所有分支都不滿足,直接結(jié)束。
public class Process02 {public static void main(String[] args) {elseIf(11) ;elseIf(9) ;elseIf(5);}private static void elseIf (Integer num){if (num > 10){System.out.println("num > 10");} else if (num > 7){System.out.println("num > 7");} else if (num > 4){System.out.println("num > 4");} else {System.out.println("num < 4");}} }注意:根據(jù)條件逐個判斷,直到找到第一個滿足的條件,不會再繼續(xù)往下面的判斷執(zhí)行,分支語句執(zhí)行完畢就會退出當(dāng)前的else…if流程。超過3層的的邏輯判斷代碼可以使用衛(wèi)語句、策略模式、狀態(tài)模式等來實現(xiàn)。
3、Switch條件
流程描述:switch語句先獲取表達(dá)式的值,判斷表達(dá)式的值與case語句后的常量值是否相同,匹配成功則執(zhí)行該case后的代碼塊,直到遇到break語句后終止,如果缺失break打斷,則繼續(xù)匹配下一case常量,直到遇到break為止。如果條件全不匹配,則執(zhí)行default后面的語句。default語句可選,如果不存在default語句,同一個switch語句,case的常量值必須互不相同。
public class Process03 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.print("What day is it today:");String value = scan.next();weekInfo(value);}private static void weekInfo (String value){switch (value) {case "Monday":System.out.println("Monday");break;case "Tuesday":System.out.println("Tuesday");break;case "Wednesday":System.out.println("Wednesday");break;case "Thursday":System.out.println("Thursday");break;case "Friday":System.out.println("Friday");break;case "Saturday":System.out.println("Saturday");break;case "Sunday":System.out.println("Sunday");break;default:System.out.println("Matching failure");break;}} }注意:從JDK1.7之后,switch支持對String字符串的匹配。
二、循環(huán)語句
循環(huán)語句就是在滿足特定條件的情況下,反復(fù)執(zhí)行同個操作。循環(huán)語句包括:for循環(huán)、while循環(huán)、do···while循環(huán)。
1、For循環(huán)
Java開發(fā)中最有用的循環(huán)方式,也是諸多算法中的基礎(chǔ)控制語句,在常見的很多算法編碼實現(xiàn)中,都需要借助for循環(huán)方式。
public class Process04 {public static void main(String[] args) {// Node01int sum = 0;for(int i=1; i<=100; i++) {sum += i;}System.out.println(sum);// Node02String[] nameArr = {"Java","C++","C#"} ;for (String name:nameArr){System.out.println("name="+name);}// Node03// 輸出 i = 13int i = 0;for (i++; i++ < 10; i++);System.out.println(++i);// 輸出:j=3 6 9int j = 0;for (j++; j++ < 10; j++){System.out.println(++j);}} }節(jié)點案例,測試結(jié)果描述:
- Node01:for循環(huán)作為計算中的常用方式;
- Node02:foreach遍歷模式,簡化循環(huán)操作,也可以改寫為for語句;
- Node03:循環(huán)for語句的基礎(chǔ)執(zhí)行機制,兩道面試常見題;
注意:越是基礎(chǔ)的東西,學(xué)起來越難,for語句作為很多算法實現(xiàn)的基礎(chǔ)控制,理解起來相當(dāng)?shù)睦@。
2、While循環(huán)
while循環(huán)語句首先判斷條件是否成立,成立才執(zhí)行循環(huán)體;
do···while循環(huán)語句先執(zhí)行一次循環(huán)體,然后判斷條件是否成立,所以do···while至少會執(zhí)行一次;
public class Process05 {public static void main(String[] args) {int num1 = 1;int num2 = 1;// while循環(huán)while(num1 <= 3) {System.out.println("num1 == " + num1);num1++;}// do...while循環(huán)do {System.out.println("num2 == " + num2);num2++;} while(num2 <= 3);} }注意:while循環(huán)在實際的開發(fā)中,因為極其容易導(dǎo)致死循環(huán),所以使用并不多。
三、流程中斷
Java中有三種流程中斷語句,關(guān)鍵字分別為break、continue、return語句。
1、Return語句
Java中最常用的流程控制關(guān)鍵字,當(dāng)執(zhí)行return語句后,從該方法返回,返回到調(diào)用該方法的業(yè)務(wù)流程中。
public class Process06 {public static void main(String[] args) {System.out.println(getNum1());System.out.println(getNum2());}public static int getNum1 (){int a =100;try{return a+1; // 這里是運算邏輯,非賦值}catch(Exception e){e.printStackTrace();}finally{return a;}}public static int getNum2 (){int a =100;try{return a++; // a++ -> a=a+1 此時a的值改變}catch(Exception e){e.printStackTrace();}finally{return a;}} }return 常在位置
- return語句只在方法最后出現(xiàn)一次。
- return語句僅在try和catch里面都出現(xiàn)。
- return語句僅在try和方法最后都出現(xiàn)。
- return語句僅在catch和方法的最后都出現(xiàn)。
2、Break語句
break中斷語句常用在for、while、do···while循環(huán)中,用于退出當(dāng)前整個循環(huán)流程,非當(dāng)前這一次循環(huán)。
public class Process07 {public static void main(String[] args) {for (int i = 1 ; i < 3 ; i++){if (i == 2){break ;}System.out.println("i = " + i);}} }3、Continue語句
Continue中斷語句常用在for、while、do···while循環(huán)中,用于退出當(dāng)前這一次循環(huán),進(jìn)入下一次循環(huán)。
public class Process08 {public static void main(String[] args) {for (int i = 1 ; i < 3 ; i++){if (i == 1){continue ;}System.out.println("i = " + i);}} }四、應(yīng)用場景
1、冒泡排序算法
public class Process09 {public static void main(String[] args) {int[] score = {9,8,7,6,5} ;// 排序次數(shù):最多 length - 1 次for (int i = 0 ; i < score.length -1 ; i ++){// 當(dāng)前排序的集合區(qū)間,排序完一個數(shù)據(jù)就放棄一個for (int j = 0 ; j < score.length - i - 1 ; j++){// 冒泡排序:把結(jié)果大的向后扔if (score[j] > score[j+1]){int temp = score[j] ;score[j] = score[j+1] ;score[j+1] = temp ;}}}// 輸出排序后的結(jié)果集for (int i = 0 ; i < score.length ; i++){System.out.print(score[i]);}} }2、排列組合算法
有1、2、3、4個數(shù)字,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)?都是多少?
public class Process10 {public static void main(String[] args) {arrange() ;}public static void arrange (){int i=0; // 百位數(shù)int j=0; // 十位數(shù)int k=0; // 個位數(shù)int t=0; // 計數(shù)器for (i = 1 ; i <= 4 ; i++){for (j = 1 ; j <= 4 ; j++){for (k = 1 ; k <=4 ; k++){if (i != j && j != k && k != i){t += 1 ;System.out.print(i*100+j*10+k+"--");}}}}System.out.println();System.out.println("t="+t);} }3、遞歸常見算法
基于遞歸思想的各種計算方法實現(xiàn)。
public class Process11 {public static void main(String[] args) {System.out.println(getSumOne(100));System.out.println(getSumTwo(30));System.out.println(getSumThree(5));}/*** 使用遞歸的方式計算1+2+...+100*/public static int getSumOne (int i){ // 傳入100int sum ;if (i == 1){return 1 ;}else {sum = i + getSumOne(i - 1) ;}return sum ;}/*** 一列數(shù)的規(guī)則如下: 1、1、2、3、5、8、13、21、34...* 求第30位數(shù)是多少, 用遞歸算法實現(xiàn)*/public static int getSumTwo (int i){ // 傳入第幾位數(shù)下標(biāo)if (i <= 0){return 0 ;} else if (i == 1 || i == 2){ // 處理前面2位的1,1return 1 ;} else { // 當(dāng)前位數(shù)是前兩位之和return getSumTwo(i - 1) + getSumTwo(i - 2) ;}}/*** 1*2*3*...*100 遞歸計算階乘*/public static int getSumThree (int i){if (i == 1){return i ;} else {return i * getSumThree (i - 1) ;}} }五、源代碼地址
GitHub·地址 https://github.com/cicadasmile/java-base-parent GitEE·地址 https://gitee.com/cicadasmile/java-base-parent推薦閱讀:Java基礎(chǔ)系列
| 01 | Java基礎(chǔ):基本數(shù)據(jù)類型,核心點整理 |
| 02 | Java基礎(chǔ):特殊的String類,和相關(guān)擴展API |
| 01 | Java并發(fā):線程的創(chuàng)建方式,狀態(tài)周期管理 |
| 02 | Java并發(fā):線程核心機制,基礎(chǔ)概念擴展 |
| 03 | Java并發(fā):多線程并發(fā)訪問,同步控制 |
| 04 | Java并發(fā):線程間通信,等待/通知機制 |
| 05 | Java并發(fā):悲觀鎖和樂觀鎖機制 |
| 06 | Java并發(fā):Lock機制下API用法詳解 |
總結(jié)
以上是生活随笔為你收集整理的Java基础篇(03):流程控制语句,和算法应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 郑州轻工业学院第八届玲珑杯校赛题解
- 下一篇: Java描述设计模式(20):命令模式