Java基礎複習第三天:流程控制語句if()...else、switch() case、do while()、for迴圈()
目錄
從下次開始,會盡量會直接懟上程式碼,減少文字
------------------------------------------------------------------------------------------------------------------
第一章 流程控制
1.流程控制的分類
a.順序結構:同一個方法中的程式碼一定是從上到下依次執行的
b.選擇結構/判斷結構
判斷語句if,一共有三種格式:
格式一:
if(判斷語句){
程式碼塊;
}
....其他程式碼
執行流程:
當代碼執行到if語句時,首先計算判斷語句的結果
如果是true,那麼執行程式碼塊,如果是false跳過程式碼塊
格式二:
if(判斷語句){
程式碼塊1;
}else {
程式碼塊2;
}
...其他程式碼
執行流程:
當代碼執行到if語句時,首先計算判斷語句的結果
如果結果是true,執行程式碼塊1,如果是false,執行程式碼塊2
注意: 程式碼塊1和程式碼塊2 有且僅有一個會執行
格式三:
if(判斷語句1){
程式碼塊1;
}else if(判斷語句2){
程式碼塊2;
}else if(判斷語句3){
程式碼塊3;
}.....else{
程式碼塊n;
}
執行流程:
先判斷 判斷語句1 如果是true執行程式碼塊1,執行之後整個if流程結束
再判斷 判斷語句2 如果是true執行程式碼塊2,執行之後整個if流程結束
再判斷 判斷語句3 如果是true執行程式碼塊3,執行之後整個if流程結束
依次類推....
如果以上所有的判斷語句都是false,那麼無條件執行else後面程式碼塊n
注意: 以上程式碼塊1到程式碼塊n 有且僅有一個會執行
總結:
三種if分別什麼時候使用?
如果只需要判斷一種情況,那麼用if的第一種格式
如果只需要判斷兩種情況,那麼用if的第二種格式
如果需要判斷多種情況,那麼用if的第三種格式
選擇語句switch 就一種格式:
格式:
switch(表示式/變數名){
case 固定值1:
程式碼塊1;
break;
case 固定值2:
程式碼塊2;
break;
case 固定值3:
程式碼塊3;
break;
....
default: // 預設
程式碼塊n;
break;
}
....其他程式碼
執行流程:
當代碼執行到swtich時,首先計算表示式或者變數的值
取出表示式或者變數的值 與下面固定值進行匹配,如果相等,那麼久執行後面的程式碼塊
執行完之後,遇到了break,break含義是結束整個switch
如果所有的固定值都沒有匹配的,那麼無條件執行default後面的程式碼塊n
注意1: 以上程式碼塊1-程式碼塊n 有且僅有一個會執行
注意2: switch(表示式)中表達式的資料型別,
JDK7之前的 byte short(char) int 列舉(enum)
JDK7之後新增 String
c.case的穿透
i.break能不能不寫???可以不寫
ii.如果刪除了case後面的break那麼出現"穿透現象"
什麼叫穿透現象:
如果case後面沒有break,那麼會下一個case後的程式碼塊,而不需判斷
iii.使用case的穿透現象改造月份案例,可以達到簡化程式碼的作用
d.迴圈結構
讓一段程式碼反覆的執行
所有的迴圈結構都有四部分組成:
①.定義性語句(計數器)
②.迴圈條件(控制迴圈是否繼續)
③.迴圈體(迴圈要執行的那段程式碼)
④.增量/步進語句(讓計算器計數)
迴圈結構之for
格式:
for(①.定義性語句(計數器);②.迴圈條件(控制迴圈是否繼續);④.增量/步進語句){
③.迴圈體(迴圈要執行的那段程式碼)
}
....其他程式碼
執行流程:
① ---> ②③④ ---> ②③④ ---> ...--->②
練習1: 列印 10次 "我對面的後面愛鳳姐"
// 計數器從0開始 那麼 計數器<幾 迴圈就是幾次
for (int i = 0;i < 10;i++){
// 0 1 2 3 4 5 6 7 8 9
System.out.println("我對面的後面愛鳳姐");
}
練習2:使用迴圈,列印1-100之間所有的整數
//1.明確迴圈次數
for (int i = 1; i<101;i++){
//2.分析規律:
/*
* i的值 要列印的值
* 1 1
* 2 2
* 3 3
* x x
* 規律:要列印的值 和 i的值是一樣的
* */
/*
* i = 1 2 3 4 5....100
* 列印 = 1 ..... 100
* i 和 要列印的值一一對應
* */
System.out.println(i);
}
練習3:使用迴圈,列印1-100之間所有的整數的累加和:
//定義一個求和的變數名
int sum = 0;
//1.先想辦法列印1-100
for (int i = 1;i < 101;i++) {
// i = 1 2 3 4... 100
//列印= 1 2 3 4....100
// System.out.println(i);
//2.把要列印的數,加到sum中
// sum = sum+i;
sum+=i;
/*
* sum = 1;
* sum = 1 + 2
* sum = 1 + 2 + 3;
* sum = 1 + 2 + 3 + 4
* ...
* sum = 1 + 2 + 3 + 4 ... 100
*
* */
}
//2.列印sum的值
System.out.println(sum);
練習4:使用迴圈,計算1-100之間的偶數和
//分步驟慢慢計算
//1.列印1-100所有的數
//2.求1-100的和
//3.求偶數和
int sum = 0;
for (int i = 1; i < 101; i++) {
//求偶數和
//判斷偶數的條件
if(i % 2 == 0) {
sum += i;
}
}
//4.最後列印偶數和sum
System.out.println(sum);
迴圈結構之while
格式:
①計算器;
while(②迴圈條件){
③迴圈體;
④增量語句;
}
執行流程:
①--->②③④---->②③④--->②③④ -->.....->②
練習1:列印10次"HelloWorld"
//使用while
int i = 0;
while (i < 10) {
System.out.println("HelloWorld");
//千萬別忘記++
i++;
}
練習2:計算1-100之間的奇數和
//計算器
int i = 1;
//求和變數
int sum = 0;
while(i < 101){
//判斷是否為奇數
if(i % 2 == 1) {
//如果是加到sum中
sum += i;
}
i++;
}
//列印結果
System.out.println(sum);
迴圈結構之do...while
①.定義性語句
②.迴圈條件
③.迴圈體
④.增量/步進語句
格式:
①.定義性語句
do{
③.迴圈體
④.增量/步進語句
}while(②.迴圈條件);
執行流程:
①③④ ---> ②③④ --> ②③④---> ...--->②
do..while迴圈的特點: 無論迴圈條件是什麼,都會先執行一次迴圈體
總結:for和while和do..while迴圈的區別
do..while(基本不用的): 迴圈體至少執行一次
for迴圈(最常用的):迴圈結束之後,計數器不能訪問
while迴圈(偶合用用的):迴圈結束之後,計數器還可以繼續使用
2.死迴圈
永不停止的迴圈
格式:
while(true){
迴圈體;
}
for(;;){
迴圈體;
}
如果沒有迴圈體,那麼大括號可以省略,但是必須用;結束
while (true);
for (;;);
3.跳出語句(迴圈控制語句)
break;
a.第一可以用於switch中,代表結束整個switch
b.第二可以用於迴圈中,立刻結束整個迴圈
continue;
只能用於迴圈,跳過本次迴圈
注意: break只能用於swtich和迴圈,不能用於if
4.巢狀迴圈
一個迴圈的迴圈體中又有另外一個迴圈
格式:
for(;;){
for(;;){
}
}
比如:
//從 2011年 到 2013年 這三年的每年365天
for(int j = 2011;j < 2014;j++) {
for(int i = 1;i<=365;i++){
System.out.println(j+"年,"+"第"+i+"天");
}
}
//從 2021年 到 2023年 這三年的每年12月
for(int i = 2021;i < 2024;i++) {
//12個月
for (int j = 1; j < 13; j++) {
//i代表年 j代表月
System.out.println(i+"年"+j+"月");
}
}
//列印圖形
要求使用巢狀迴圈,列印以下圖形:
* * * * *
* * * * *
* * * * *
for(int i = 0;i<3;i++){ //3行
//每行5個
for(int j = 0;j<5;j++) {
System.out.print("* ");
}
System.out.println();
}
總結: 內層迴圈體執行的次數 = 外層迴圈次數 * 內層迴圈的次數