流程控制語句
1)順序結構 從上往下,依次執行
2)選擇結構 按照不同的選擇,執行不同的代碼
3)循環結構 做一些重複的代碼
1.1)順序結構案例:
分析思路:
要完成兩個變量值的交換,我們需要藉助一個第三方的變量來暫存其中的一個變量的值,然後將數據已被暫存的變量的值改變,最後將另一個變量的值使用暫存的數據改變。
編寫步驟,依次完成:
①聲明第三方變量,假設爲z
②將x的值賦給z,完成對x所代表的數據的暫時存儲
③將y的值賦給x,完成對x的交換過程
④將z中暫存的x的原值賦給y,完成對y進行的交換過程
程序實現:
int x = 10, y = 20; int z; z = x; x = y; y = z; System.out.println("交換後:x=" + x + ",y=" + y); System.out.println("結論:順序流程要分清語句執行的先後次序");
2)選擇結構
選擇結構if
2.1)if語句
三種格式
A:格式1
if(比較表達式) {
語句體;
}
執行流程:
判斷比較表達式的值,看是true還是false
如果是true,就執行語句體
如果是false,就不執行語句體
B:格式2
if(比較表達式) {
語句體1;
}else {
語句體2;
}
執行流程:
判斷比較表達式的值,看是true還是false
如果是true,就執行語句體1
如果是false,就執行語句體2
C:格式3
if(比較表達式1) {
語句體1;
}else if(比較表達式2){
語句體2;
}
...
else {
語句體n+1;
}
執行流程:
判斷比較表達式1的值,看是true還是false
如果是true,就執行語句體1
如果是false,就繼續判斷比較表達式2的值,看是true還是false
如果是true,就執行語句體2
如果是false,就繼續判斷比較表達式3的值,看是true還是false
...
如果都不滿足,就執行語句體n+1
2.2)if選擇案例:
import java.util.Scanner; public class JavaTest{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("請輸入要查詢的分數:"); //考慮了分數還可能有小數 double score = scanner.nextDouble(); if(score >= 90) System.out.println("您查詢的成績爲優秀等級"); else if (score >=80 && score <90) System.out.println("您查詢的成績爲優良等級"); else if(score >=70 && score <80) System.out.println("您查詢的成績爲良好等級"); else if (score >=60 && score<70) System.out.println("您查詢的成績爲及格等級"); else System.out.println("您查詢的成績不及格"); } }
2.3)注意事項
A:比較表達式無論簡單還是複雜,結果是boolean類型
B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
建議:永遠不要省略。
C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。
D:else後面如果沒有if,是不會出現比較表達式的。
E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。
2.4)三元運算符和if語句第二種格式的關係
所有的三元運算符能夠實現的,if語句的第二種格式都能實現。反之不成立。
選擇結構switch語句
1.1)格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
格式解釋說明:
switch:說明這是switch語句。
表達式:可以是byte,short,int,char
JDK5以後可以是枚舉
JDK7以後可以是字符串
case:後面的值就是要和表達式進行比較的值
break:表示程序到這裏中斷,跳出switch語句
default:如果所有的情況都不匹配,就執行這裏,相當於if語句中的else
1.2)執行流程:
A:首先計算表達式的值
B:和每一個case進行匹配,如果有就執行對應的語句體,看到break就結束。
C:如果沒有匹配,就執行default的語句體n+1
1.3)switch案例:
A:鍵盤錄入一個數字(1-7),輸出對應的星期幾。
import java.util.Scanner; public class Week{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("請輸入您要查詢的星期數:"); int week = scanner.nextInt(); switch(week) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期一"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("請輸入1-7有效的Week數目"); break; } } }
1.4)注意事項:
A:case後面只能是常量,不能是變量,而且,多個case後面的值不能出現相同的
B:default可以省略嗎?
可以省略,但是不建議,因爲它的作用是對不正確的情況給出提示。
特殊情況:
case就可以把值固定。
A,B,C,D
C:break可以省略嗎?
可以省略,但是結果可能不是我們想要的。
會出現一個現象:case穿透。
最終我們建議不要省略
D:default一定要在最後嗎?
不是,可以在任意位置。但是建議在最後。
E:switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
1.5)if語句和switch語句各自的場景
A:if
針對boolean類型的判斷
針對一個範圍的判斷
針對幾個常量的判斷
B:switch
針對幾個常量的判斷
3、循環語句:
3.1)有三種:for,while,do...while
3.1.1)for循環語句
A:格式
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
3.1.2)執行流程:
a:執行初始化語句
b:執行判斷條件語句
如果這裏是true,就繼續
如果這裏是false,循環就結束
c:執行循環體語句
d:執行控制條件語句
e:回到b
3.1.3)注意事項
a:判斷條件語句無論簡單還是複雜,結果是boolean類型
b:循環體語句如果是一條,可以省略大括號,但是不建議
c:有分號就沒有左大括號,有左大括號就沒有分號
3.1.4)案例
求1-100的和,求1-100的偶數和,求1-100的奇數和
class QiuHe{ public static void main(String[] args) { //求1-100之間偶數和 int sum2 = 0; for (int x = 1;x <= 100 ; x++ ){ if (x%2 == 0) sum2 += x; } System.out.println("1-100的偶數和是"+ sum2); System.out.println("----------------------"); int sum3 = 0; for (int x = 0; x<=100 ;x+=2 ) { sum3 += x; } System.out.println("1-100的偶數和是"+ sum3); } }
3.2)while循環
3.2.1)基本格式
while(判斷條件語句) {
循環體語句;
}
擴展格式:
初始化語句;
while(判斷條件語句){
循環體語句;
控制條件語句;
}
3.2.2)for和while的區別
a:使用上的區別
for語句的那個控制條件變量,在循環結束後不能在使用了。
而while的可以繼續使用。
b:理解上的區別
for適合於一個範圍的判斷
while適合次數不明確的
舉例:吃葡萄
3.2.3)案例珠穆朗瑪峯問題
class JavaTest1{ public static void main(String[] args) { int count = 0; int end = 884800; int start = 1; while (start < end) { //只要每次變化的厚度沒有超過珠穆朗瑪峯高度,就摺疊,統計變量++ count++; //摺疊一次有什麼變化呢?厚度是原來的二倍 start *=2; } System.out.println(count); } }
3.3)do...while循環
3.3.1)基本格式
do {
循環體語句;
}while(判斷條件語句);
擴展格式:
初始化語句;
do {
循環體語句;
控制條件語句;
}while(判斷條件語句);
通過查看格式,我們就可以看出其實三種循環的格式可以是統一的。
3.3.2)三種循環的區別
a:do...while循環至少執行一次循環體
b:for和while必須先判斷條件是否是true,然後後才能決定是否執行循環體
3.3.3)循環使用的注意事項(死循環)
A:一定要注意修改控制條件,否則容易出現死循環。
B:最簡單的死循環格式
a:while(true){...}
b:for(;;){}
4、控制跳轉語句
4.1)break:中斷的意思
A:用在循環和switch語句中,離開此應用場景無意義。
B:作用
a:跳出單層循環
//控制跳轉語句
//break:中斷 continue:繼續 return:返回
//break:中斷的意思,使用場景
//A:switch 語句中 B:循環語句中(循環語句中加入了if判斷的情況)
//離開上面兩個場景,無意義。
class JavaTest1{ public static void main(String[] args) { for (int x=0;x<10 ;x++ ) { if(x == 2){ //作用:跳出單層循環 break; } System.out.println("break"); } System.out.println("break1"); } }
b:跳出多層循環,需要標籤語句的配合
4.2)continue:繼續
A:用在循環中,離開此應用場景無意義。
B:作用
a:跳出單層循環的一次,可以繼續下一次
class JavaTest1{ public static void main(String[] args) { for (int x=0;x<10 ;x++ ) { if(x == 2){ //作用:跳出單層循環 continue; } System.out.println(x); } System.out.println("continue"); } }
4.3)return:返回
A:用於結束方法的,後面還會在繼續講解和使用。
B:一旦遇到return,程序就不會在繼續往後執行。
class JavaTest1{ public static void main(String[] args) { for (int x=0;x<10 ;x++ ) { if(x == 2){ //不在執行reture return; } System.out.println(x); } System.out.println("return"); } }