1.if-else條件判斷結構
1.1.
結構一:
if(條件表達式){
執行表達式
}
結構二:二選一
if(條件表達式){
執行表達式1
}else{
執行表達式2
}
結構三:n選一
if(條件表達式){
執行表達式1
}else if(條件表達式){
執行表達式2
}else if(條件表達式){
執行表達式3
}
…
else{
執行表達式n
}
1.2.說明:
- else 結構是可選的。
- 針對于條件表達式:
如果多個條件表達式之間是“互斥”關系(或沒有交集的關系),哪個判斷和執行語句聲明在上面還是下面,無所謂。
如果多個條件表達式之間有交集的關系,需要根據實際情況,考慮清楚應該將哪個結構聲明在上面。
如果多個條件表達式之間有包含的關系,通常情況下,需要將范圍小的聲明在范圍大的上面。否則,范圍小的就沒機會執行了。 - if-else結構是可以相互嵌套的。
- 如果if-else結構中的執行語句只有一行時,對應的一對{}可以省略的。但是,不建議大家省略。
2.switch-case選擇結構
switch(表達式){
case 常量1:
執行語句1;
//break;
case 常量2:
執行語句2;
//break;
…
default:
執行語句n;
//break;
}
2.說明:
① 根據switch表達式中的值,依次匹配各個case中的常量。一旦匹配成功,則進入相應case結構中,調用其執行語句。
當調用完執行語句以后,則仍然繼續向下執行其他case結構中的執行語句,直到遇到break關鍵字或此switch-case結構
末尾結束為止。
② break,可以使用在switch-case結構中,表示一旦執行到此關鍵字,就跳出switch-case結構
③ switch結構中的表達式,只能是如下的6種數據類型之一:
byte 、short、char、int、枚舉類型(JDK5.0新增)、String類型(JDK7.0新增)
④ case 之后只能聲明常量。不能聲明范圍。
⑤ break關鍵字是可選的。
⑥ default:相當于if-else結構中的else.
default結構是可選的,而且位置是靈活的。
3.如果switch-case結構中的多個case的執行語句相同,則可以考慮進行合并。
4.break在switch-case中是可選的
3.循環結構的四要素
① 初始化條件
② 循環條件 —>是boolean類型
③ 循環體
④ 迭代條件
說明:通常情況下,循環結束都是因為②中循環條件返回false了。
4.三種循環結構:
2.1 for循環結構
for(①;②;④){
③
}
執行過程:① - ② - ③ - ④ - ② - ③ - ④ - … - ②
2.2 while循環結構
①
while(②){
③;
④;
}
執行過程:① - ② - ③ - ④ - ② - ③ - ④ - … - ②
說明:
寫while循環千萬小心不要丟了迭代條件。一旦丟了,就可能導致死循環!
for和while循環總結:
- 開發中,基本上我們都會從for、while中進行選擇,實現循環結構。
- for循環和while循環是可以相互轉換的!
區別:for循環和while循環的初始化條件部分的作用范圍不同。 - 我們寫程序,要避免出現死循環。
2.3 do-while循環結構
①
do{
③;
④;
}while(②);
執行過程:① - ③ - ④ - ② - ③ - ④ - … - ②
說明:
1.do-while循環至少會執行一次循環體!
2.開發中,使用for和while更多一些。較少使用do-while
5.“無限循環”結構: while(true) 或 for(;😉
總結:如何結束一個循環結構?
方式一:當循環條件是false時
方式二:在循環體中,執行break
6.嵌套循環
1.嵌套循環:將一個循環結構A聲明在另一個循環結構B的循環體中,就構成了嵌套循環
內層循環:循環結構A
外層循環:循環結構B
2.說明:
① 內層循環結構遍歷一遍,只相當于外層循環循環體執行了一次
② 假設外層循環需要執行m次,內層循環需要執行n次。此時內層循環的循環體一共執行了m * n次
③ 外層循環控制行數,內層循環控制列數
【典型練習】
//練習一:
/*
******
******
******
******
/
for(int j = 1;j <= 4;j++ ){
for(int i = 1;i <= 6;i++){
System.out.print(’’);
}
System.out.println();
}
//練習二:
/* i(行號) j(*的個數)
* 1 1
** 2 2
*** 3 3
**** 4 4
***** 5 5
*/
for(int i = 1;i <= 5;i++){//控制行數for(int j = 1;j <= i;j++){//控制列數System.out.print("*");}System.out.println();}//練習三:九九乘法表//練習四:100以內的質數
補充:衡量一個功能代碼的優劣:
1.正確性
2.可讀性
3.健壯性
4.高效率與低存儲:時間復雜度 、空間復雜度 (衡量算法的好壞)
如何理解流程控制的練習:
流程控制結構的使用 + 算法邏輯
break和continue關鍵字的使用
使用范圍 循環中使用的作用(不同點) 相同點break: switch-case 循環結構中 結束當前循環 關鍵字后面不能聲明執行語句 continue: 循環結構中 結束當次循環 關鍵字后面不能聲明執行語句補充:帶標簽的break和continue的使用return 返回。
/*
補充說明: 如何從鍵盤獲取不同類型的變量:需要使用Scanner類
具體實現步驟:
1.導包:import java.util.Scanner;
2.Scanner的實例化:Scanner scan = new Scanner(System.in);
3.調用Scanner類的相關方法(next() / nextXxx()),來獲取指定類型的變量
注意:
需要根據相應的方法,來輸入指定類型的值。如果輸入的數據類型與要求的類型不匹配時,會報異常:InputMisMatchException
導致程序終止。
*/
//1.導包:import java.util.Scanner;
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args){//2.Scanner的實例化Scanner scan = new Scanner(System.in);//3.調用Scanner類的相關方法System.out.println("請輸入你的姓名:");String name = scan.next();System.out.println(name);System.out.println("請輸入你的芳齡:");int age = scan.nextInt();System.out.println(age);System.out.println("請輸入你的體重:");double weight = scan.nextDouble();System.out.println(weight);System.out.println("你是否相中我了呢?(true/false)");boolean isLove = scan.nextBoolean();System.out.println(isLove);//對于char型的獲取,Scanner沒有提供相關的方法。只能獲取一個字符串System.out.println("請輸入你的性別:(男/女)");String gender = scan.next();//"男"char genderChar = gender.charAt(0);//獲取索引為0位置上的字符System.out.println(genderChar);
}
}