一.概述
在一個程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的孤紧。也就是說豺裆,程序的流程對運行結(jié)果有直接的影響。所以号显,我們必須清楚每條語句的執(zhí)行流程臭猜。而且,很多時候我們要通過控制語句的執(zhí)行順序來實現(xiàn)我們要完成的功能押蚤。
二.順序結(jié)構(gòu)
代碼:
public class ProcessControl{
public static void main(String[] args){
//順序執(zhí)行蔑歌,根據(jù)編寫的順序,從上到下運行
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
}
運行結(jié)果:
image.png
二.判斷/選擇結(jié)構(gòu)
(一)判斷語句—if
1.基本格式
if(關(guān)系表達(dá)式){
語句體;
}
2.執(zhí)行流程
- 首先判斷關(guān)系表達(dá)式看其結(jié)果是
true
還是false
- 如果是
true
就執(zhí)行語句體 - 如果是
false
就不執(zhí)行語句體
Untitled Diagram.jpg
代碼:
public class ProcessControl{
public static void main(String[] args){
System.out.println("開始");
// 定義兩個變量
int a = 10;
int b = 20;
int c = 10;
//變量使用if判斷
if (a == b){
System.out.println("a等于b");
}
if(a == c){
System.out.println("a等于c");
}
System.out.println("結(jié)束");
}
}
運行結(jié)果:
image.png
(二)判斷語句—if...else
1.基本格式
if(關(guān)系表達(dá)式) {
語句體1;
}else {
語句體2;
}
2.執(zhí)行流程
- 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體1
- 如果是false就執(zhí)行語句體2
Untitled Diagram.jpg
代碼:
public class ProcessControl{
public static void main(String[] args){
// 判斷給定的數(shù)據(jù)是奇數(shù)還是偶數(shù)
// 定義變量
int a = 1;
int b = 14;
if(a % 2 == 0) {
System.out.println("a是偶數(shù)");
} else{
System.out.println("a是奇數(shù)");
}
if(b % 2 == 0) {
System.out.println("b是偶數(shù)");
} else{
System.out.println("b是奇數(shù)");
}
System.out.println("結(jié)束");
}
}
運行結(jié)果:
image.png
(三)判斷語句—if..else if...else
1.基本格式
if (判斷條件1) {
執(zhí)行語句1;
} else if (判斷條件2) {
執(zhí)行語句2;
}
...
}else if (判斷條件n) {
執(zhí)行語句n;
} else {
執(zhí)行語句n+1;
}
2.執(zhí)行流程
- 首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體1
- 如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體2
- 如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false
… - 如果沒有任何關(guān)系表達(dá)式為true揽碘,就執(zhí)行語句體n+1次屠。
image.png
代碼:
public class ProcessControl{
public static void main(String[] args) {
// x和y的關(guān)系滿足如下:
// x>=3 y = 2x + 1;
//‐1<=x<3 y = 2x;
// x<=‐1 y = 2x – 1;
// 根據(jù)給定的x的值,計算出y的值并輸出雳刺。
// 定義變量
int x = 2;
int y;
if (x >= 3) {
y = 2 * x + 1;
} else if(-1 <= x && x<3) {
y = 2 * x;
} else {
y = 2 * x - 1;
}
System.out.println("y的值是:"+y);
}
}
運行結(jié)果:
image.png
3.用if..else if...else實現(xiàn)判斷考試成績
代碼:
public class ProcessControl {
public static void main(String[] args) {
int score = 120;
if (score >= 90 && score <= 100) {
System.out.println("優(yōu)秀");
} 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 if (score >= 0 && score < 60) {
System.out.println("不及格");
} else {// 單獨處理邊界之外的不合理情況
System.out.println("數(shù)據(jù)錯誤");
}
}
}
運行結(jié)果:
image.png
4.用if...else語句替換三元運算符
代碼:
public class ProcessControl {
public static void main(String[] args) {
int a = 105;
int b = 20;
// 首先使用三元運算符
// int max = a > b ? a : b;
// 使用今天的if語句
int max;
if (a > b) {
max = a;
} else {
max = b;
}
System.out.println("最大值:" + max);
}
}
運行結(jié)果:
image.png
(四)選擇語句—switch
1.基本格式
switch(表達(dá)式) {
case 常量值1:
語句體1;
break;
case 常量值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
2.執(zhí)行流程
- 首先計算出表達(dá)式的值
- 其次劫灶,和case依次比較,一旦有對應(yīng)的值掖桦,就會執(zhí)行相應(yīng)的語句本昏,在執(zhí)行的過程中,遇到break就會結(jié)束枪汪。
- 最后涌穆,如果所有的case都和表達(dá)式的值不匹配怔昨,就會執(zhí)行default語句體部分,然后程序結(jié)束掉宿稀。
image.png
代碼:
public class ProcessControl {
public static void main(String[] args) {
System.out.println("今天星期幾?");
// 定義變量趁舀,判斷是星期幾
int weekday = 4;
// switch語句實現(xiàn)選擇
switch (weekday) {
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("你輸入的數(shù)字有誤!");
break;
}
}
}
運行結(jié)果:
image.png
注意事項:
- 多個case后面的數(shù)值不可以重復(fù)。
- switch后面小括號當(dāng)中只能是下列數(shù)據(jù)類型:
基本數(shù)據(jù)類型: byte/short/char/int
引用數(shù)據(jù)類型: String字符串祝沸、enum枚舉- switch語句格式可以很靈活:前后順序可以顛倒赫编,而且break語句還可以省略。(匹配哪一個case就從哪一個位置向下執(zhí)行奋隶,直到遇到了break或者整體結(jié)束為止擂送。)
3. case的穿透性
代碼:
public class ProcessControl {
public static void main(String[] args) {
int i = 5;
switch (i) {
case 0:
System.out.println("執(zhí)行case0");
break;
case 5:
System.out.println("執(zhí)行case5");
case 10:
System.out.println("執(zhí)行case10");
default:
System.out.println("執(zhí)行default");
}
}
}
運行結(jié)果:
image.png
注意事項:
- 上述程序中,執(zhí)行case5后唯欣,由于沒有break語句嘹吨,程序會一直向后走,不會在判斷case境氢,也不會理會break蟀拷,直接運行完整體switch。
三.循環(huán)結(jié)構(gòu)
(一)循環(huán)語句—for
1.基本格式
for(初始化表達(dá)式1; 布爾表達(dá)式2; 步進(jìn)表達(dá)式4){
循環(huán)體3
}
2.執(zhí)行流程
執(zhí)行順序:1234>234>234…2不滿足為止萍聊。
- 負(fù)責(zé)完成循環(huán)變量初始化
- 負(fù)責(zé)判斷是否滿足循環(huán)條件问芬,不滿足則跳出循環(huán)
- 具體執(zhí)行的語句
- 循環(huán)后,循環(huán)條件所涉及變量的變化情況
image.png
代碼:
public class ProcessControl {
public static void main(String[] args) {
// 控制臺輸出10次HelloWorld寿桨,不使用循環(huán)
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("-------------------");
// 用for循環(huán)改進(jìn)此衅,循環(huán)10次
// 定義變量從0開始,循環(huán)條件為<10
for (int i = 1; i <= 10; i++) {
System.out.println("HelloWorld" + i);
}
}
}
運行結(jié)果:
image.png
(二)循環(huán)語句2—while
1.基本格式
- 標(biāo)準(zhǔn)格式:
while(布爾表達(dá)式2){
循環(huán)體3
}
- 拓展格式:
初始化表達(dá)式1
while(布爾表達(dá)式2){
循環(huán)體3
步進(jìn)表達(dá)式4
}
2.執(zhí)行流程
- 標(biāo)準(zhǔn)格式:執(zhí)行順序:23>23>23…2不滿足為止亭螟。
- 負(fù)責(zé)判斷是否滿足循環(huán)條件挡鞍,不滿足則跳出循環(huán)
- 具體執(zhí)行的語句
- 拓展格式:執(zhí)行順序:1234>234>234…2不滿足為止。
- 負(fù)責(zé)完成循環(huán)變量初始化
- 負(fù)責(zé)判斷是否滿足循環(huán)條件预烙,不滿足則跳出循環(huán)
- 具體執(zhí)行的語句
- 循環(huán)后墨微,循環(huán)條件所涉及變量的變化情況
image.png
代碼:
public class ProcessControl {
public static void main(String[] args) {
// 控制臺輸出10次HelloWorld,使用while循環(huán)
int i = 1;
while (i <= 10) {
System.out.println("HelloWorld" + i);
i++;
}
}
}
運行結(jié)果:
image.png
(三)循環(huán)語句2—do...while
1.基本格式
- 標(biāo)準(zhǔn)格式:
do{
循環(huán)體3
}while(布爾表達(dá)式2);
- 拓展格式:
初始化表達(dá)式1
do{
循環(huán)體3
步進(jìn)表達(dá)式4
}while(布爾表達(dá)式2);
執(zhí)行流程
2.執(zhí)行流程
- 標(biāo)準(zhǔn)格式:執(zhí)行順序:32>32>32…2不滿足為止扁掸。
- 負(fù)責(zé)判斷是否滿足循環(huán)條件翘县,不滿足則跳出循環(huán)
- 具體執(zhí)行的語句
- 拓展格式:執(zhí)行順序:134>234>234…2不滿足為止。
- 負(fù)責(zé)完成循環(huán)變量初始化谴分。
- 負(fù)責(zé)判斷是否滿足循環(huán)條件锈麸,不滿足則跳出循環(huán)。
- 具體執(zhí)行的語句
- 循環(huán)后狸剃,循環(huán)變量的變化情況
image.png
代碼:
public class ProcessControl {
public static void main(String[] args) {
// 控制臺輸出10次HelloWorld掐隐,使用do...while循環(huán)
int i = 1;
do {
System.out.println("HelloWorld" + i);
i++;
} while (i <= 10);
}
}
運行結(jié)果:
image.png
注意事項:
- do...while循環(huán)的特點:無條件執(zhí)行一次循環(huán)體,即使我們將循環(huán)條件直接寫成false钞馁,也依然會循環(huán)一次虑省。
代碼:
public class ProcessControl {
public static void main(String[] args) {
do {
System.out.println("無條件執(zhí)行一次!");
} while (false);
}
}
運行結(jié)果:
image.png
for 和 while 的小區(qū)別:
- 控制條件語句所控制的那個變量,在for循環(huán)結(jié)束后僧凰,就不能再被訪問到了探颈,而while循環(huán)結(jié)束還可以繼續(xù)使用,如果你想繼續(xù)使用训措,就用while伪节,否則推薦使用for。原因是for循環(huán)結(jié)束绩鸣,該變量就從內(nèi)存中消失怀大,能夠提高內(nèi)存的使用效率。
- 在已知循環(huán)次數(shù)的時候使用推薦使用for呀闻,循環(huán)次數(shù)未知的時推薦使用while化借。
(四)跳出語句
1.break
使用場景:終止switch或者循環(huán)
- 在選擇結(jié)構(gòu)switch語句中
- 在循環(huán)語句中
代碼:
public class ProcessControl {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
// 需求:打印完兩次HelloWorld之后結(jié)束循環(huán)
if (i == 3) {
break;
}
System.out.println("HelloWorld" + i);
}
}
}
運行結(jié)果:
image.png
2.continue
使用場景:結(jié)束本次循環(huán),繼續(xù)下一次的循環(huán)
- 在循環(huán)語句中
代碼:
public class ProcessControl {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
// 需求:不打印第三次HelloWorld
if (i == 3) {
continue;
}
System.out.println("HelloWorld" + i);
}
}
}
運行結(jié)果:
image.png
(五)死循環(huán)
死循環(huán):也就是循環(huán)中的條件永遠(yuǎn)為true捡多,死循環(huán)的是永不結(jié)束的循環(huán)蓖康。
1.死循環(huán)的標(biāo)準(zhǔn)格式
while(true){
循環(huán)體
}
代碼:
public class ProcessControl {
public static void main(String[] args) {
while (true) {
System.out.println("Hello!");
}
}
}
運行結(jié)果:
image.png
- 死循環(huán)后邊不能有語句,否則編譯失敗
代碼:
public class ProcessControl {
public static void main(String[] args) {
while (true) {
System.out.println("Hello!");
}
System.out.println("Hello!");
}
}
運行結(jié)果:
image.png
(六)嵌套循環(huán)
所謂嵌套循環(huán),是指一個循環(huán)的循環(huán)體是另一個循環(huán)垒手。比如for循環(huán)里面還有一個for循環(huán)蒜焊,就是嵌套循環(huán)。
總共的循環(huán)次數(shù)=外循環(huán)次數(shù)*內(nèi)循環(huán)次數(shù)
1.嵌套循環(huán)格式:
for(初始化表達(dá)式1; 循環(huán)條件2; 步進(jìn)表達(dá)式7) {
for(初始化表達(dá)式3; 循環(huán)條件4; 步進(jìn)表達(dá)式6) {
執(zhí)行語句5;
}
}
2.執(zhí)行順序:
- 123456>456...456>723456>456...456>723456
- 外循環(huán)一次科贬,內(nèi)循環(huán)多次泳梆。
代碼:
public class ProcessControl {
public static void main(String[] args) {
// 需求:使用嵌套循環(huán),打印5*8的矩形
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 8; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
運行結(jié)果:
image.png