流程控制
1. 分類
- 順序結(jié)構(gòu):自上而下順序執(zhí)行锋边;
- 分支結(jié)構(gòu):滿足一定條件執(zhí)行歌馍,否則不執(zhí)行黍氮;
- 循環(huán)結(jié)構(gòu):滿足一定條件跛十,重復(fù)執(zhí)行彤路;
2. 順序結(jié)構(gòu)
定義:代碼按照自上而下順序執(zhí)行。
3. 分支結(jié)構(gòu)
定義:滿足一定條件芥映,代碼才執(zhí)行洲尊,否則不執(zhí)行远豺。
-
分類
- if...else...
- switch
-
if結(jié)構(gòu):最簡(jiǎn)單的分支結(jié)構(gòu);
- 語(yǔ)法結(jié)構(gòu)
if(判斷條件){ 滿足條件執(zhí)行的代碼 }
- 注意
- if是一個(gè)關(guān)鍵字坞嘀,區(qū)分大小寫躯护;
- if后面必須在()號(hào)內(nèi)放置一個(gè)boolean類型的值,或者返回值是boolean類型的表達(dá)式丽涩;
- if判斷條件后面不能加;號(hào)棺滞,否則會(huì)導(dǎo)致后面的代碼直接執(zhí)行,與if條件無(wú)關(guān)矢渊;
- {}號(hào)中的內(nèi)容可以是一句代碼继准,也可以是多行代碼;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int age = 18; if(age>=18) { System.out.println("歡迎進(jìn)入昆淡!"); } } }
-
if...else...結(jié)構(gòu):滿足和不滿足分別執(zhí)行不同的代碼锰瘸;
- 語(yǔ)法結(jié)構(gòu)
if(判斷條件){ 滿足條件執(zhí)行的代碼 }else{ // 否則 不滿足條件執(zhí)行的代碼 }
- 注意
- if和else是一個(gè)組合刽严,兩個(gè){}中的代碼只會(huì)執(zhí)行一個(gè)昂灵;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int age = 16; if(age>=18) { System.out.println("歡迎進(jìn)入!"); }else { System.out.println("禁止入內(nèi)舞萄!"); } } }
-
if(){}else if(){}else if(){}...else{}結(jié)構(gòu)
- 語(yǔ)法結(jié)構(gòu)
if(條件1){ 滿足條件1時(shí)候執(zhí)行的代碼 }else if(條件2){ 滿足條件2時(shí)候執(zhí)行的代碼 }else if(條件3){ 滿足條件3時(shí)候執(zhí)行的代碼 }...else{ 前面的條件都不滿足時(shí)候執(zhí)行的代碼 }
- 注意
- 這是多重判斷眨补;
- 可以對(duì)多個(gè)值進(jìn)行匹配;
- 如果匹配成功倒脓,只會(huì)執(zhí)行其中一個(gè)滿足條件的代碼撑螺;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int month = 4; if((month==3) || (month==4) || (month==5)){ System.out.println(month + "月份是春季"); }else if((month==6) || (month==7) || (month==8)){ System.out.println(month + "月份是夏季"); }else if((month==9) || (month==10) || (month==11)){ System.out.println(month + "月份是秋季"); }else if((month==1) || (month==2) || (month==12)){ System.out.println(month + "月份是冬季"); }else{ System.out.println(month + "月份不存在"); } } }
-
if嵌套:if條件語(yǔ)句中再次添加判斷;
- 語(yǔ)法結(jié)構(gòu)
if(條件1){ if(條件2){ 同時(shí)滿足條件1和條件2時(shí)候執(zhí)行的代碼 }else{ 滿足條件1崎弃,不滿足條件2時(shí)候執(zhí)行的代碼 } }else{ 不滿足條件1時(shí)候執(zhí)行的代碼 }
-
switch分支結(jié)構(gòu)
- 語(yǔ)法結(jié)構(gòu)
變量key; switch(key){ case value1: key==value1 時(shí)候執(zhí)行的代碼; break; case value2: key==value2 時(shí)候執(zhí)行的代碼 break; ... // 如果key和所有的value都不匹配甘晤,就執(zhí)行default default: ... break; }
- 注意
- 與case搭配使用;
- 根據(jù)key不斷匹配value值饲做,如果匹配上則執(zhí)行對(duì)應(yīng)代碼线婚,其他不執(zhí)行;
- case穿透
- 定義:case穿透是指在switch中一段代碼執(zhí)行結(jié)束后沒(méi)有break結(jié)束盆均,造成執(zhí)行了其他case中代碼的情況塞弊;
- 危害:可能會(huì)執(zhí)行一些不相干的代碼;
- 好處:當(dāng)多個(gè)判斷返回同一個(gè)結(jié)果的時(shí)候可以利用case穿透泪姨;
- default
- 在switch中游沿,如果所有的case都沒(méi)有匹配到key的值,就會(huì)執(zhí)行default中的內(nèi)容肮砾;
- default代碼塊可以放置在任意獨(dú)立位置诀黍;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int month = 4; switch(month){ case 12: case 1: case 2: System.out.println(month + "月份是冬季"); break; case 3: case 4: case 5: System.out.println(month + "月份是春季"); break; case 6: case 7: case 8: System.out.println(month + "月份是夏季"); break; case 9: case 10: case 11: System.out.println(month + "月份是秋季"); break; default: System.out.println(month + "不存在"); break; } } }
4. 循環(huán)結(jié)構(gòu)
定義:滿足一定條件下,可重復(fù)執(zhí)行的語(yǔ)句仗处。
-
分類
- for循環(huán)
- while循環(huán)
- do...while循環(huán)
-
for循環(huán)
- 語(yǔ)法結(jié)構(gòu)
/** * 初始化語(yǔ)句:又叫循環(huán)前表達(dá)式 * 條件判斷語(yǔ)句:又叫關(guān)系表達(dá)式 * 條件控制語(yǔ)句:又叫循環(huán)后表達(dá)式 */ for(初始化語(yǔ)句; 條件判斷語(yǔ)句; 條件控制語(yǔ)句){ 循環(huán)體 }
- for循環(huán)執(zhí)行流程
- 執(zhí)行初始化語(yǔ)句
- 執(zhí)行條件判斷語(yǔ)句
- 如果返回true蔗草,就繼續(xù)執(zhí)行
- 如果返回false咒彤,就結(jié)束循環(huán)
- 執(zhí)行循環(huán)體
- 執(zhí)行條件控制語(yǔ)句
- 再次執(zhí)行條件判斷語(yǔ)句,重復(fù)循環(huán)
public class Forloop { public static void main(String[] args) { // TODO Auto-generated method stub //定義各位咒精、十位镶柱、百位 int gw, sw, bw; //定義計(jì)數(shù)器 int count = 0; //for循環(huán) for(int i = 0; i < 1000; i++) { //獲取個(gè)位、十位模叙、百位字面值 gw = i % 10; sw = i / 10 % 10; bw = i / 100; //判斷是否為水仙花數(shù) if((gw*gw*gw+sw*sw*sw+bw*bw*bw) == i) { System.out.println(i + "是一個(gè)水仙花數(shù)"); count++; } } System.out.println("1000以內(nèi)一共有"+count+"個(gè)水仙花數(shù)"); } }
-
注意事項(xiàng)
- 初始化語(yǔ)句歇拆,在循環(huán)開(kāi)始前執(zhí)行,無(wú)論循環(huán)多少次范咨,只執(zhí)行一次
- 條件判斷語(yǔ)句故觅,其結(jié)果必須是boolean值
- 循環(huán)體,如果只有一句話渠啊,花括號(hào)可省略输吏,建議不要省略
- 條件控制語(yǔ)句,在循環(huán)體執(zhí)行完之后執(zhí)行
-
for循環(huán)特殊形式
- 條件判斷語(yǔ)句省略替蛉,無(wú)限循環(huán)
//條件永為true for(i=1; ;i++){}
- 條件控制語(yǔ)句省略贯溅,無(wú)限循環(huán)
//條件永為true for(int i = 1; i<=100;){}
- 初始化語(yǔ)句和條件控制語(yǔ)句省略,無(wú)限循環(huán)
for(;true;){}
- 條件判斷語(yǔ)句和條件控制語(yǔ)句省略躲查,無(wú)限循環(huán)
for(int i = 1;;){}
- 三個(gè)語(yǔ)句都省略
//相當(dāng)于while(true)語(yǔ)句 for(;;){}
-
while循環(huán)
- 語(yǔ)法結(jié)構(gòu)
初始化語(yǔ)句 while(條件判斷語(yǔ)句){ 循環(huán)體 條件控制語(yǔ)句 }
- while循環(huán)執(zhí)行流程
- 執(zhí)行初始化語(yǔ)句
- 執(zhí)行條件判斷語(yǔ)句
- 如果是true它浅,就繼續(xù)執(zhí)行
- 如果是false,就結(jié)束循環(huán)
- 執(zhí)行循環(huán)體
- 執(zhí)行條件控制語(yǔ)句
- 再執(zhí)行條件判斷語(yǔ)句镣煮,重復(fù)循環(huán)
public class Whileloop { public static void main(String[] args) { // TODO Auto-generated method stub int i = 1; int sum = 0; while(i <= 100) { sum += i; i++; } System.out.println(sum); } }
-
注意事項(xiàng)
- 一般將while循環(huán)看作是for循環(huán)的簡(jiǎn)寫格式
- 一般在循環(huán)次數(shù)不明確的情況下使用
- 條件控制語(yǔ)句也屬于循環(huán)語(yǔ)句
while循環(huán)特殊形式
//當(dāng)條件判斷語(yǔ)句一直是true姐霍,while進(jìn)入死循環(huán) while(true){}
-
do...while循環(huán)
- 語(yǔ)法結(jié)構(gòu)
初始化語(yǔ)句 do{ 循環(huán)體 條件控制語(yǔ)句 }while(條件判斷語(yǔ)句);
-
do...while循環(huán)執(zhí)行流程
- 執(zhí)行初始化語(yǔ)句
- 執(zhí)行循環(huán)體
- 執(zhí)行條件控制語(yǔ)句
- 執(zhí)行條件判斷語(yǔ)句
- 如果為true,就繼續(xù)循環(huán)
- 如果為false典唇,就結(jié)束循環(huán)
-
注意事項(xiàng)
- 無(wú)論條件是否成立镊折,都會(huì)執(zhí)行循環(huán)體,直到條件判斷語(yǔ)句為false結(jié)束
- 所以介衔,循環(huán)體至少執(zhí)行一次
-
break恨胚、continue和return關(guān)鍵字
-
break作用
- 在switch語(yǔ)句和循環(huán)中使用
- 結(jié)束switch語(yǔ)句或終止并跳出循環(huán)
- 只能終止所在循環(huán)體,不能終止父循環(huán)
-
continue作用
- 終止本次循環(huán)夜牡,并跳過(guò)本次循環(huán)continue后的代碼与纽,進(jìn)入下輪循環(huán)
-
return作用
- 返回,是與方法對(duì)應(yīng)的塘装,可寫在方法體的任意地方
- 結(jié)束整個(gè)方法急迂,return后的代碼都不執(zhí)行
break和continue也可用于父循環(huán)
public static void main(String[] args) { w:for (int i = 0; i < 10; i++ ) { //外循環(huán)語(yǔ)句 System.out.println("外循環(huán)語(yǔ)句.....前"); for (int j = 0; j < 10; j++) { break w; } System.out.println("外循環(huán)語(yǔ)句.....后"); } }
-
鍵盤錄入-Scanner
作用:給用戶提供輸入的通道。
1. 使用
- 導(dǎo)包:
import java.util.Scanner
蹦肴; - 創(chuàng)建鍵盤錄入對(duì)象:
Scanner input = new Scanner(System.in)
僚碎; - 提示用戶輸入內(nèi)容:
System.out.println("請(qǐng)輸入任意內(nèi)容:")
; - 獲取用戶輸入內(nèi)容:
String str = input.next()
阴幌; - 使用所獲取的數(shù)據(jù)勺阐;
//1卷中、導(dǎo)包
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//2、創(chuàng)建鍵盤錄入對(duì)象
Scanner input = new Scanner(System.in);
//3渊抽、提示用戶輸入內(nèi)容
System.out.println("請(qǐng)輸入任意內(nèi)容:");
//4蟆豫、獲取用戶輸入內(nèi)容
String str = input.next();
//使用所獲取的數(shù)據(jù)
System.out.println(str);
}
}
2. 注意
- 不同的方法接受不同類型的參數(shù),
input.next() //獲取任意內(nèi)容懒闷,格式都會(huì)變成String字符串類型
input.nextInt() //獲取整型int內(nèi)容
input.nextDouble() //獲取double類型內(nèi)容
input.nextBoolean() //獲取boolean類型內(nèi)容