1 選擇結(jié)構(gòu)if
1.1 if語句
??在Java中伶贰,if語句的具體語法格式如下:
if (條件語句){
執(zhí)行語句;
……
}
??上述格式中黍衙,判斷條件是一個布爾值,當判斷條件為true時位仁,{}中的執(zhí)行語句才會執(zhí)行聂抢。if語句的執(zhí)行流程如下圖所示棠众。
??接下來通過一段代碼,學習一下if語句的具體用法
public class HelloWorld{
public static void main(String[] args){
int x = 5;
if (x < 10){
x++;
}
System.out.println("x="+x);
}
}
??在上述代碼中胸墙,定義了一個變量x迟隅,其初始值為5励七。在if語句的判斷條件中判斷x的值是否小于10掠抬,很明顯條件成立两波,{}中的語句會被執(zhí)行,變量x的值將進行自增单起。從運行結(jié)果可以看出嘀倒,x的值已由原來的5變成了6测蘑。
1.2 if…else語句
??if…else語句是指如果滿足某種條件,就進行某種處理乍狐,否則就進行另一種處理浅蚪。例如惜傲,要判斷一個正整數(shù)的奇偶贝攒,如果該數(shù)字能被2整除則是一個偶數(shù)隘弊,否則該數(shù)字就是一個奇數(shù)梨熙。if…else語句具體語法格式如下:
if (判斷條件){
執(zhí)行語句1
……
}else{
執(zhí)行語句2
……
}
??上述格式中咽扇,判斷條件是一個布爾值。當判斷條件為true時树埠,if后面{}中的執(zhí)行語句1會執(zhí)行怎憋。當判斷條件為false時盛霎,else后面{}中的執(zhí)行語句2會執(zhí)行耽装。if…else語句的執(zhí)行流程如下圖所示掉奄。
??接下來通過一段代碼,來實現(xiàn)判斷奇偶數(shù)的程序
public class HelloWorld{
public static void main(String[] args){
int num = 19;
if (num%2 == 0){
//判斷條件成立
System.out.println("num是一個偶數(shù)");
}else{
System.out.println("num是一個奇數(shù)");
}
}
}
??上述代碼中,變量num的值為19活玲,模以2的結(jié)果為1舒憾,不等于0穗熬,判斷條件不成立唤蔗。因此會執(zhí)行else后面{}中的語句妓柜,打印“num是一個奇數(shù)”棍掐。
1.3 if…else if…else語句
??if…else if…else語句用于對多個條件進行判斷,進行多種不同的處理。例如最疆,對一個學生的考試成績進行等級的劃分努酸,如果分數(shù)大于80分等級為優(yōu)获诈,否則舔涎,如果分數(shù)大于70分等級為良逗爹,否則,如果分數(shù)大于60分等級為中于购,否則肋僧,等級為差嫌吠。if…else if…else語句具體語法格式如下:
if (判斷條件1) {
執(zhí)行語句1
} else if (判斷條件2) {
執(zhí)行語句2
}
...
else if (判斷條件n) {
執(zhí)行語句n
} else {
執(zhí)行語句n+1
}
??上述格式中居兆,判斷條件是一個布爾值竹伸。當判斷條件1為true時勋篓,if后面{}中的執(zhí)行語句1會執(zhí)行譬嚣。當判斷條件1為false時拜银,會繼續(xù)執(zhí)行判斷條件2,如果為true則執(zhí)行語句2操灿,以此類推趾盐,如果所有的判斷條件都為false救鲤,則意味著所有條件均未滿足本缠,else后面{}中的執(zhí)行語句n+1會執(zhí)行搓茬。if…else if…else語句的執(zhí)行流程如下圖所示卷仑。
??接下來通過一段代碼锡凝,來實現(xiàn)對學生考試成績進行等級劃分的程序
public class HelloWorld{
public static void main(String[] args){
int grade = 75; //定義學生成績
if (grade > 80) {
//滿足條件 grade > 80
System.out.println("該成績等級為優(yōu)");
}else if (grade > 70){
//滿足條件 grade > 70
System.out.println("該成績等級為良");
}else if (grade > 60){
//滿足條件 grade > 60
System.out.println("該成績等級為中");
}
else{
//以上都不滿足
System.out.println("該成績等級為差");
}
}
}
??上述代碼中张肾,定義了學生成績grade為75吞瞪。它不滿足第一個判斷條件grade>80驾孔,會執(zhí)行第二個判斷條件grade>70翠勉,條件成立对碌,因此會打印“該成績的等級為良”朽们。
1.4 選擇結(jié)構(gòu)if語句與三元運算轉(zhuǎn)換
??三元運算符骑脱,它和if-else語句類似惜姐,語法如下:
判斷條件 ? 表達式1 : 表達式2
??三元運算符會得到一個結(jié)果歹袁,通常用于對某個變量進行賦值寝优,當判斷條件成立時乏矾,運算結(jié)果為表達式1的值,否則結(jié)果為表達式2的值铅协。例如求兩個數(shù)x狐史、y中的較大者骏全,如果用if…else語句來實現(xiàn)姜贡,具體代碼如下:
public class HelloWorld{
public static void main(String[] args){
int x = 0;
int y = 1;
int max;
if (x>y){
max = x;
}else{
max =y;
}
System.out.println(max);
}
}
??上面的代碼運行之后楼咳,變量max的值為1爬橡。上述代碼可以使用三元運算符代替
int max = x > y ? x : y;
2 循環(huán)結(jié)構(gòu)
2.1 循環(huán)語句while
??while循環(huán)語句和選擇結(jié)構(gòu)if語句有些相似糙申,都是根據(jù)條件判斷來決定是否執(zhí)行大括號內(nèi)的執(zhí)行語句柜裸。區(qū)別在于疙挺,while語句會反復地進行條件判斷铐然,只要條件成立搀暑,{}內(nèi)的執(zhí)行語句就會執(zhí)行跨琳,直到條件不成立脉让,while循環(huán)結(jié)束。while循環(huán)語句的語法結(jié)構(gòu)如下:
while(循環(huán)條件){
執(zhí)行語句
………
}
??在上面的語法結(jié)構(gòu)中,{}中的執(zhí)行語句被稱作循環(huán)體毅该,循環(huán)體是否執(zhí)行取決于循環(huán)條件眶掌。當循環(huán)條件為true時朴爬,循環(huán)體就會執(zhí)行召噩。循環(huán)體執(zhí)行完畢時會繼續(xù)判斷循環(huán)條件具滴,如條件仍為true則會繼續(xù)執(zhí)行构韵,直到循環(huán)條件為false時疲恢,整個循環(huán)過程才會結(jié)束显拳。
??while循環(huán)的執(zhí)行流程如下圖所示搓萧。
??接下來通過一段代碼揍移,來實現(xiàn)打印1~4之間的自然數(shù)
public class HelloWorld{
public static void main(String[] args){
int x = 1; //定義變量x羊精,初始值為1
while (x <= 4){ //循環(huán)條件
System.out.println("x="+x); //條件成立喧锦,打印x的值
x++; //x進行自增
}
}
}
??在上述代碼中,x初始值為1阵具,在滿足循環(huán)條件x <= 4的情況下定铜,循環(huán)體會重復執(zhí)行阳液,打印x的值并讓x進行自增。因此打印結(jié)果中x的值分別為1揣炕、2帘皿、3、4畸陡。
??大家要注意的是鹰溜,代碼x++用于在每次循環(huán)時改變變量x的值,從而達到最終改變循環(huán)條件的目的曹动。如果沒有這行代碼,整個循環(huán)會進入無限循環(huán)的狀態(tài)牲览,永遠不會結(jié)束墓陈。
2.2 循環(huán)語句for
??for循環(huán)語句是最常用的循環(huán)語句,一般用在循環(huán)次數(shù)已知的情況下竭恬。for循環(huán)語句的語法格式如下:
for(初始化表達式; 循環(huán)條件; 操作表達式){
執(zhí)行語句
………
}
??在上面的語法結(jié)構(gòu)中跛蛋,for關(guān)鍵字后面()中包括了三部分內(nèi)容:初始化表達式、循環(huán)條件和操作表達式痊硕,它們之間用“;”分隔赊级,{}中的執(zhí)行語句為循環(huán)體。
??接下來分別用1表示初始化表達式岔绸、2表示循環(huán)條件理逊、3表示操作表達式、4表示循環(huán)體盒揉,通過序號來具體分析for循環(huán)的執(zhí)行流程晋被。具體如下:
for(1 ; 2 ; 3){
4
}
第一步,執(zhí)行1
第二步刚盈,執(zhí)行2羡洛,如果判斷結(jié)果為true,執(zhí)行第三步藕漱,如果判斷結(jié)果為false欲侮,執(zhí)行第五步
第三步崭闲,執(zhí)行4
第四步,執(zhí)行3威蕉,然后重復執(zhí)行第二步
第五步刁俭,退出循環(huán)
??接下來通過一個案例對自然數(shù)1~4進行求和
public class HelloWorld{
public static void main(String[] args){
int sum = 0; //定義變量sum,用于記錄累加的和
for (int i = 1;i <= 4;i++){ //i的值會在1~4之間變化
sum += i; //實現(xiàn)i值的累加
}
System.out.println(sum);
}
}
??上述代碼中韧涨,變量i的初始值為1牍戚,在判斷條件i<=4為true的情況下,會執(zhí)行循環(huán)體sum+=i虑粥,執(zhí)行完畢后如孝,會執(zhí)行操作表達式i++,i的值變?yōu)?娩贷,然后繼續(xù)進行條件判斷暑竟,開始下一次循環(huán),直到i=5時育勺,條件i<=4為false但荤,結(jié)束循環(huán),執(zhí)行for循環(huán)后面的代碼涧至,打印“sum=10”腹躁。
2.3 循環(huán)語句do…while
do…while循環(huán)語句和while循環(huán)語句功能類似,其語法結(jié)構(gòu)如下:
do {
執(zhí)行語句
………
} while(循環(huán)條件);
??在上面的語法結(jié)構(gòu)中南蓬,關(guān)鍵字do后面{}中的執(zhí)行語句是循環(huán)體纺非。do…while循環(huán)語句將循環(huán)條件放在了循環(huán)體的后面。這也就意味著赘方,循環(huán)體會無條件執(zhí)行一次烧颖,然后再根據(jù)循環(huán)條件來決定是否繼續(xù)執(zhí)行。
do…while循環(huán)的執(zhí)行流程如下圖所示窄陡。
??接下來使用do…while循環(huán)語句來實現(xiàn)打印1~4之間的自然數(shù)
public class HelloWorld{
public static void main(String[] args){
int x = 1; //定義變量x炕淮,初始值為1
do{
System.out.println("x="+x); //打印x的值
x++; //x的值自增
} while(x <= 4); //循環(huán)條件
}
}
2.4 循環(huán)嵌套
??嵌套循環(huán)是指在一個循環(huán)語句的循環(huán)體中再定義一個循環(huán)語句的語法結(jié)構(gòu)。while跳夭、do…while涂圆、for循環(huán)語句都可以進行嵌套,并且它們之間也可以互相嵌套币叹,如最常見的在for循環(huán)中嵌套for循環(huán)润歉,格式如下:
for(初始化表達式; 循環(huán)條件; 操作表達式) {
………
for(初始化表達式; 循環(huán)條件; 操作表達式) {
執(zhí)行語句
………
}
………
}
接下來通過一個練習,來實現(xiàn)使用“*”打印直角三角形
public class HelloWorld{
public static void main(String[] args){
int i,j; //定義兩個循環(huán)變量
for (i=1;i <= 9;i++){ //外層循環(huán)
for (j=1;j <= i;j++){ //內(nèi)層循環(huán)
System.out.print("*"); //打印*
}
System.out.print("\n"); //換行
}
}
}
運行結(jié)果如下所示
??在上述代碼中定義了兩層for循環(huán)颈抚,分別為外層循環(huán)和內(nèi)層循環(huán)踩衩,外層循環(huán)用于控制打印的行數(shù),內(nèi)層循環(huán)用于打印“”,每一行的“”個數(shù)逐行增加驱富,最后輸出一個直角三角形反砌。
2.5 跳轉(zhuǎn)語句(break、continue)
??跳轉(zhuǎn)語句用于實現(xiàn)循環(huán)執(zhí)行過程中程序流程的跳轉(zhuǎn)萌朱,在Java中的跳轉(zhuǎn)語句有break語句和continue語句。
1策菜、break語句
??在switch條件語句和循環(huán)語句中都可以使用break語句晶疼。當它出現(xiàn)在switch條件語句中時,作用是終止某個case并跳出switch結(jié)構(gòu)又憨。當它出現(xiàn)在循環(huán)語句中翠霍,作用是跳出循環(huán)語句,執(zhí)行后面的代碼蠢莺。
public class HelloWorld{
public static void main(String[] args){
int x = 1; //定義變量x寒匙,初始值為1
while (x <= 4){ //循環(huán)條件
System.out.println("x="+x); //條件成立,打印x的值
if (x == 3){
break;
}
x++; //x進行自增
}
}
}
運行結(jié)果
在上述帶代碼中躏将,通過while循環(huán)打印x的值锄弱,當x的值為3時使用break語句跳出循環(huán)。因此打印結(jié)果中并沒有出現(xiàn)“x=4”祸憋。
2会宪、標記
??當break語句出現(xiàn)在嵌套循環(huán)中的內(nèi)層循環(huán)時,它只能跳出內(nèi)層循環(huán)蚯窥,如果想使用break語句跳出外層循環(huán)則需要對外層循環(huán)添加標記掸鹅。如下所示,只能打印4行“*”拦赠。
public class HelloWorld{
public static void main(String[] args){
int i,j; //定義兩個循環(huán)變量
itcase: for (i=1;i <= 9;i++){
for (j=1;j <=i;j++){
if (i > 4){
break itcase;
}
System.out.print("*");
}
System.out.print("\n");
}
}
}
3巍沙、continue語句
??continue語句用在循環(huán)語句中,它的作用是終止本次循環(huán)荷鼠,執(zhí)行下一次循環(huán)句携。接下來通過一個練習對1~100之內(nèi)的奇數(shù)求和
public class HelloWorld{
public static void main(String[] args){
int sum = 0;
for (int i = 1;i <= 100;i++){
if (i%2 == 0){ //判定i為偶數(shù)
continue; //結(jié)束本次循環(huán)
}
sum += i; //計算累計和
}
System.out.println("sum = "+sum);
}
}
??上述代碼中,使用for循環(huán)讓變量i的值在1100之間循環(huán)允乐,在循環(huán)過程中务甥,當i的值為偶數(shù)時,將執(zhí)行continue語句結(jié)束本次循環(huán)喳篇,進入下一次循環(huán)敞临。當i的值為奇數(shù)時,sum和i進行累加麸澜,最終得到1100之間所有奇數(shù)的和挺尿,打印“sum = 2500”。
??在嵌套循環(huán)語句中,continue語句后面也可以通過使用標記的方式結(jié)束本次外層循環(huán)编矾,用法與break語句相似熟史,在此不再舉例說明。
3 流程控制語句(switch)
??switch 條件語句也是一種很常用的選擇語句窄俏,它和if條件語句不同蹂匹,它只能針對某個表達式的值作出判斷,從而決定程序執(zhí)行哪一段代碼凹蜈。例如限寞,在程序中使用數(shù)字1~7來表示星期一到星期天,如果想根據(jù)某個輸入的數(shù)字來輸出對應(yīng)中文格式的星期值仰坦,可以通過下面的一段偽代碼來描述:
用于表示星期的數(shù)字
如果等于1履植,則輸出星期一
如果等于2,則輸出星期二
如果等于3悄晃,則輸出星期三
如果等于4玫霎,則輸出星期四
如果等于5,則輸出星期五
如果等于6妈橄,則輸出星期六
如果等于7庶近,則輸出星期天
??對于上面一段偽代碼的描述,大家可能會立刻想到用剛學過得if…else if…else語句來實現(xiàn)眷蚓,但是由于判斷條件比較多拦盹,實現(xiàn)起來代碼過長,不便于閱讀溪椎。Java中提供了一種switch語句來實現(xiàn)這種需求普舆,在switch語句中使用switch關(guān)鍵字來描述一個表達式,使用case關(guān)鍵字來描述和表達式結(jié)果比較的目標值校读,當表達式的值和某個目標值匹配時沼侣,會執(zhí)行對應(yīng)case下的語句。具體實現(xiàn)代碼如下:
switch (表達式){
case 目標值1:
執(zhí)行語句1
break;
case 目標值2:
執(zhí)行語句2
break;
......
case 目標值n:
執(zhí)行語句n
break;
default:
執(zhí)行語句n+1
break;
}
??在上面的格式中歉秫,switch語句將表達式的值與每個case中的目標值進行匹配蛾洛,如果找到了匹配的值,會執(zhí)行對應(yīng)case后的語句雁芙,如果沒找到任何匹配的值轧膘,就會執(zhí)行default后的語句。switch語句中的break關(guān)鍵字將在后面的做具體介紹兔甘,此處谎碍,我們只需要知道break的作用是跳出switch語句即可。
3.1 選擇結(jié)構(gòu)switch練習
??接下來通過一個案例演示根據(jù)數(shù)字來輸出中文格式的星期
public class HelloWorld{
public static void main(String[] args){
int week = 5;
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("輸入的數(shù)字不正確...");
break;
}
}
}
運行結(jié)果如圖所示
??在使用switch語句的過程中洞焙,如果多個case條件后面的執(zhí)行語句是一樣的蟆淀,則該執(zhí)行語句只需書寫一次即可拯啦,這是一種簡寫的方式。例如熔任,要判斷一周中的某一天是否為工作日褒链,同樣使用數(shù)字1~7來表示星期一到星期天,當輸入的數(shù)字為1疑苔、2甫匹、3、4惦费、5時就視為工作日兵迅,否則就視為休息日。接下來通過一個案例來實現(xiàn)上面描述的情況
public class HelloWorld{
public static void main(String[] args){
int week = 2;
switch (week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("輸入的數(shù)字不正確...");
break;
}
}
}