[洛谷]封鎖陽光大學-圖染色
主要內容:
- if else 判斷語句
- switch 選擇語句
- for 迴圈語句
- while 迴圈語句
- do while 迴圈語句
- 跳出語句 break,continue
第一章 流程控制
1.1 概述
在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。也就是說,程式的流程對執行結果
有直接的影響。所以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實現
我們要完成的功能。
1.2 順序結構
publicstaticvoidmain(String[]args){ //順序執行,根據編寫的順序,從上到下執行 System.out.println(1); System.out.println(2); System.out.println(3); }
第二章 判斷語句
2.1 判斷語句1--if
- if 語句第一種格式: if
if(關係表示式){ 語句體; }
- 執行流程
-
- 首先判斷關係表示式看其結果是 true還是false
- 如果是 true就執行語句體
- 如果是 false就不執行語句體
publicstaticvoidmain(String[]args){ System.out.println("開始"); //定義兩個變數 inta=10; intb=20; //變數使用if判斷 if(a==b){ System.out.println("a等於b"); } intc=10; if(a==c){ System.out.println("a等於c"); } System.out.println("結束"); }
2.2 判斷語句2--if...else
- if 語句第二種格式: if...else
if(關係表示式){ 語句體1; }else{ 語句體2; }
- 執行流程
- 首先判斷關係表示式看其結果是 true還是false
- 如果是 true就執行語句體1
- 如果是 false就執行語句體2
publicstaticvoidmain(String[]args){ //判斷給定的資料是奇數還是偶數 //定義變數 inta=1; if(a%2==0){ System.out.println("a是偶數"); }else{ System.out.println("a是奇數"); } System.out.println("結束"); }
2.3 判斷語句3--if..else if...else
- if 語句第三種格式: if...else if ...else
if(判斷條件1){ 執行語句1; }elseif(判斷條件2){ 執行語句2; } ... }elseif(判斷條件n){ 執行語句n; }else{ 執行語句n+1; }
- 執行流程
- 首先判斷關係表示式 1看其結果是true還是false
- 如果是 true就執行語句體1
- 如果是 false就繼續判斷關係表示式2看其結果是true還是false
- 如果是 true就執行語句體2
- 如果是 false就繼續判斷關係表示式…看其結果是true還是false
- …
- 如果沒有任何關係表示式為 true,就執行語句體n+1。
publicstaticvoidmain(String[]args){ //x和y的關係滿足如下: //x>=3y=2x+1; //‐1<=x<3y=2x; //x<=‐1y=2x–1; //根據給定的x的值,計算出y的值並輸出。 //定義變數 intx=5; inty; if(x>=3){ y=2*x+1; }elseif(x>=‐1&&x<3){ y=2*x; }else{ y=2*x‐1; } System.out.println("y的值是:"+y); }
2.4 語句練習
- 指定考試成績,判斷學生等級
- 90-100 優秀
- 80-89 好
- 70-79 良
- 60-69 及格
- 60 以下 不及格
publicstaticvoidmain(String[]args){ intscore=100; if(score<0||score>100){ System.out.println("你的成績是錯誤的"); }elseif(score>=90&&score<=100){ System.out.println("你的成績屬於優秀"); }elseif(score>=80&&score<90){ System.out.println("你的成績屬於好"); }elseif(score>=70&&score<80){ System.out.println("你的成績屬於良"); }elseif(score>=60&&score<70){ System.out.println("你的成績屬於及格"); }else{ System.out.println("你的成績屬於不及格"); } }}
2.5 if 語句和三元運算子的互換
在某些簡單的應用中,if語句是可以和三元運算子互換使用的。
publicstaticvoidmain(String[]args){ inta=10; intb=20; //定義變數,儲存a和b的較大值 intc; if(a>b){ c=a; }else{ c=b; } //可以上述功能改寫為三元運算子形式 c=a>b?a:b; }
第三章 選擇語句
3.1 選擇語句--switch
- switch 語句格式:
switch(表示式){ case常量值1: 語句體1; break; case常量值2: 語句體2; break; ... default: 語句體n+1; break; }
- 執行流程
- 首先計算出表示式的值
- 其次,和 case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。
- 最後,如果所有的 case都和表示式的值不匹配,就會執行default語句體部分,然後程式結束掉。
publicstaticvoidmain(String[]args){ //定義變數,判斷是星期幾 intweekday=6; //switch語句實現選擇 switch(weekday){ case1: System.out.println("星期一"); break; case2: System.out.println("星期二"); break; case3: System.out.println("星期三"); break; case4: System.out.println("星期四"); break; case5: System.out.println("星期五"); break; case6: System.out.println("星期六"); break; case7: System.out.println("星期日"); break; default: System.out.println("你輸入的數字有誤"); break; } }
switch 語句中,表示式的資料型別,可以是byte,short,int,char,enum(列舉),JDK7後可以接收字串。
3.2 case 的穿透性
在switch語句中,如果case的後面不寫break,將出現穿透現象,也就是不會在判斷下一個case的值,直接向後運
行,直到遇到break,或者整體switch結束。
publicstaticvoidmain(String[]args){ inti=5; switch(i){ case0: System.out.println("執行case0"); break; case5: System.out.println("執行case5"); case10: System.out.println("執行case10"); default: System.out.println("執行default"); } }
上述程式中,執行case5後,由於沒有break語句,程式會一直向後走,不會在判斷case,也不會理會break,直接
執行完整體switch。
由於case存在穿透性,因此初學者在編寫switch語句時,必須要寫上break。
第四章 迴圈語句
4.1 迴圈概述
迴圈語句可以在滿足迴圈條件的情況下,反覆執行某一段程式碼,這段被重複執行的程式碼被稱為迴圈體語句,當反覆
執行這個迴圈體時,需要在合適的時候把迴圈判斷條件修改為false,從而結束迴圈,否則迴圈將一直執行下去,形
成死迴圈。
4.2 迴圈語句1--for
- for 迴圈語句格式:
for(初始化表示式①;布林表示式②;步進表示式④){ 迴圈體③ }
- 執行流程
- 執行順序:①②③④ >②③④>②③④…②不滿足為止。
- ①負責完成迴圈變數初始化
- ②負責判斷是否滿足迴圈條件,不滿足則跳出迴圈
- ③具體執行的語句
- ④迴圈後,迴圈條件所涉及變數的變化情況
publicstaticvoidmain(String[]args){ //控制檯輸出10次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("HelloWorld"); System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐"); //用迴圈改進,迴圈10次 //定義變數從0開始,迴圈條件為<10 for(intx=0;x<10;x++){ System.out.println("HelloWorld"+x); } }
- 迴圈練習:使用迴圈,計算 1-100之間的偶數和
publicstaticvoidmain(String[]args){ //1.定義一個初始化變數,記錄累加求和,初始值為0 intsum=0; //2.利用for迴圈獲取1‐100之間的數字 for(inti=1;i<=100;i++){ //3.判斷獲取的陣列是奇數還是偶數 if(i%2==0){ //4.如果是偶數就累加求和 sum+=i; } } //5.迴圈結束之後,列印累加結果 System.out.println("sum:"+sum); }
4.3 迴圈語句2--while
- while 迴圈語句格式:
初始化表示式① while(布林表示式②){ 迴圈體③ 步進表示式④ }
- 執行流程
- 執行順序:①②③④ >②③④>②③④…②不滿足為止。
- ①負責完成迴圈變數初始化。
- ②負責判斷是否滿足迴圈條件,不滿足則跳出迴圈。
- ③具體執行的語句。
- ④迴圈後,迴圈變數的變化情況。
while迴圈輸出10次HelloWorld
publicstaticvoidmain(String[]args){ //while迴圈實現列印10次HelloWorld //定義初始化變數 inti=1; //迴圈條件<=10 while(i<=10){ System.out.println("HelloWorld"); //步進 i++; } }
while迴圈計算1-100之間的和
publicstaticvoidmain(String[]args){ //使用while迴圈實現 //定義一個變數,記錄累加求和 intsum=0; //定義初始化表示式 inti=1; //使用while迴圈讓初始化表示式的值變化 while(i<=100){ //累加求和 sum+=i; //步進表示式改變變數的值 i++; } //列印求和的變數 System.out.println("1‐100的和是:"+sum); }
4.4 迴圈語句3--do...while
- do...while 迴圈格式
初始化表示式① do{ 迴圈體③ 步進表示式④ }while(布林表示式②);
- 執行流程
- 執行順序:①③④ >②③④>②③④…②不滿足為止。
- ①負責完成迴圈變數初始化。
- ②負責判斷是否滿足迴圈條件,不滿足則跳出迴圈。
- ③具體執行的語句
- ④迴圈後,迴圈變數的變化情況
輸出10次HelloWorld
publicstaticvoidmain(String[]args){ intx=1; do{ System.out.println("HelloWorld"); x++; }while(x<=10); }
do...while迴圈的特點:無條件執行一次迴圈體,即使我們將迴圈條件直接寫成false,也依然會迴圈一次。這樣的
迴圈具有一定的風險性,因此初學者不建議使用do...while迴圈。
publicstaticvoidmain(String[]args){ do{ System.out.println("無條件執行一次"); }while(false); }
4.5 迴圈語句的區別
- for 和 while 的小區別:
-
續使用,如果你想繼續使用,就用while,否則推薦使用for。原因是for迴圈結束,該變數就從記憶體中消
失,能夠提高記憶體的使用效率。 - 在已知迴圈次數的時候使用推薦使用 for,迴圈次數未知的時推薦使用while。
-
4.6 跳出語句
break
- 使用場景:終止 switch或者迴圈
- 在選擇結構 switch語句中
- 在迴圈語句中
- 離開使用場景的存在是沒有意義的
publicstaticvoidmain(String[]args){ for(inti=1;i<=10;i++){ //需求:列印完兩次HelloWorld之後結束迴圈 if(i==3){ break; } System.out.println("HelloWorld"+i); } }
continue
- 使用場景:結束本次迴圈,繼續下一次的迴圈
publicstaticvoidmain(String[]args){ for(inti=1;i<=10;i++){ //需求:不列印第三次HelloWorld if(i==3){ continue; } System.out.println("HelloWorld"+i); } }
第五章 擴充套件知識點
5.1 死迴圈
- 死迴圈: 也就是迴圈中的條件永遠為true,死迴圈的是永不結束的迴圈。例如:while(true){}。在後期的開發中,會出現使用死迴圈的場景,例如:我們需要讀取使用者輸入的輸入,但是使用者輸入多少資料我們不清楚,也只能使用死迴圈,當用戶不想輸入資料了,就可以結束迴圈了,如何去結束一個死迴圈呢,就需要使用到跳出語句了。
5.2 巢狀迴圈
- 所謂巢狀迴圈 ,是指一個迴圈的迴圈體是另一個迴圈。比如for迴圈裡面還有一個for迴圈,就是巢狀迴圈。總共的迴圈次數=外迴圈次數*內迴圈次數
- 巢狀迴圈格式:
for(初始化表示式①;迴圈條件②;步進表示式⑦){ for(初始化表示式③;迴圈條件④;步進表示式⑥){ 執行語句⑤; } }
- 巢狀迴圈執行流程:
- 執行順序:①②③④⑤⑥ >④⑤⑥>⑦②③④⑤⑥>④⑤⑥
- 外迴圈一次,內迴圈多次。
- 比如跳繩:一共跳 5組,每組跳10個。5組就是外迴圈,10個就是內迴圈。
練習 :使用巢狀迴圈,列印5*8的矩形
publicstaticvoidmain(String[]args){ //5*8的矩形,列印5行*號,每行8個 //外迴圈5次,內迴圈8次 for(inti=0;i<5;i++){ for(intj=0;j<8;j++){ //不換行列印星號 System.out.print("*"); } //內迴圈列印8個星號後,需要一次換行 System.out.println(); } }