1. 程式人生 > 實用技巧 >[洛谷]封鎖陽光大學-圖染色

[洛谷]封鎖陽光大學-圖染色

主要內容:

  • 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();
}
}