天天看點

Java程式員從笨鳥到菜鳥之(一)流程控制

一  java 三大 流程控制      java控制 流程主要有三種

1)順序控制

2)條件控制

3)循環控制

補充:任何'程式設計語言'都涉及這個'話題'
           

     1. 順序控制

按照程式先後的順序,沒有所謂的中斷,'依次'執行我們的代碼
           

     2. 條件控制

  a. 目的 : 對程式執行,一些不可預知的流程,進行一個預先判斷
  b. 條件 : 條件具有真假的特性,而且隻可能為真,或者為假,即:條件判斷後輸出的是bolean型
  c. java條件控制有四種手段
           

 (1)if語句

#結構:  
  if(條件){
      //實作我們的邏輯
  }
           

(2)if...else語語句

# 結構:
   if(條件){
      //實作我們的邏輯
   }else{
     //實作我們的邏輯
   }
           

練習1:愛我請扣1,否則請扣其它

public class IfDemo1
{
	
	public static void main(String[] args){
			int a=1;
			if(a==1){
				System.out.println("愛我");
			}else{
				System.out.println("不愛我");
			}
	}
	
}
           

(3)if(條件)...else if(條件)...(接N個)...else

# 結構

   if(條件){
      //實作我們的邏輯
   }if else(條件){
     //實作我們的邏輯

   }if else(條件){

    //實作我們的邏輯

   }...else{

   //實作我們的邏輯
 }
           

注意事項

1)else if(條件): 條件的限制,和我們前面說的if(條件),倆者是等價的.
2)else if 可以有多個
3)else 可以省略掉的, 但是即使沒有比對所有條件,我們依然建議必須有else,來保證語句的'完整和可讀性'
4)如果滿足條件隻需要執行一行代碼,{}也是可以省略的,但是'不建議這麼做'
5)對于 if..else if..else 語句,我們僅會執行'第一個比對到'的條件
           

  練習2:

定義一個變量,儲存年齡 

(1)當年齡大于60歲,我們輸出老年. 

(2)當年齡在 40 到 60 之間,我們輸出中年. 

(3)當年齡在18 - 40之間,我們輸出少年. 如果小于18歲,輸出未成年

實作方式:用if-else來實作
           
public class IfDemo2
{
	
	public static void main(String[] args){
		
		int age = 10;//可以通過鍵盤錄入資料
		
		if(age<0){
			System.out.println("非法年齡");//異常提醒
		}
		
		if(age>60){
			System.out.println("老年");
		}else if(age>=40 && age<=60){
			System.out.println("中年");
		}else if(age>18 && age <40){
			System.out.println("少年");
		}else{
			System.out.println("未成年");
		}
			
	}
}
           

練習3:

對于 if..else if..else 語句,我們'僅會執行第一個比對到的條件'

了解:由于是一個'整體','遇到則停止'
           
public class IfDemo3{
	
	public static void main(String[] args){
			int score = 60;
			int num =10;
			int c = 0;
			if(score>90){
				System.out.println("score>90");
			}else if(score>50){
				System.out.println("score>50");
			}else if((c=num)>5){
				System.out.println("num>5");
			}else{
				System.out.println("not match");
			}
			
			System.out.println(c);//通過c的值,來說明if-else在第一個比對條件滿足後,是否還執行下面的if-else語句
			
	}
	
}
           

(4)switch case

#  結構:

switch(判斷值){
  case 值1:
  break;
  case 值2:
  break;
  .......
  case 值n:
  break;
  default:
 }
           

注意事項:

1. switch後面的"()" 一定不能省略

2. switch後面跟的是'整形或者是字元型'實際上,對于char型來說,在這裡也是先轉換成ASCII碼,然後進行比較的

3. case 值:隻能是字面常量(1,2, 'A','c'); 常量表達式( 2 * 3, 'a'+3)

4. break: 跳出我們比對到的條件, break 可以省略的。break可以跳出我們的switch代碼塊,如果'省略掉break'.,那麼代碼将會在第一個比對成功的條件,'一直向下繼續'執行我們的switch語句,直到遇到break為止

5. default: 可以省略,而且default 可以'放到任何的位置'; 

default'初始'作用: 當比對不到任何條件的時候,執行裡面的内容.

6. switch-case語句進行比對時,'總是從第一個有效case值'開始比對的('如果遇到default的話就先開始')
           

練習4:根據業績進行獎勵:前三名的,獎勵800rmb;4-5名的話,獎勵500rmb

public class SwitchDemo{
	
	public static void main(String[] args){
		
		int turn = 10;
		
		switch(turn){
			
			default://default 可以放到任何的位置
			System.out.println("100");
			break;
			//如果省略掉break.,那麼代碼将會在第一個比對成功的條件,
            //一直向下繼續執行我們的switch語句,直到遇到break為止;
			case 1:
			case 2:
			case 3:
			System.out.println("800");
			break;
			
			case 4:
			case 5:
			System.out.println("500");
			break;
					
		}
		
	}
}
           
Java程式員從笨鳥到菜鳥之(一)流程控制

(5)條件控制語句來說:彼此可以嵌套使用的

注意事項:

    建議:雖然條件判斷語句可以彼此嵌套,而且也沒有嵌套層數的限制,但是過多的嵌套很影響可讀性。

         是以要避免過多的嵌套,一般最多建議嵌套3層。
           

練習5:

根據天氣和時間,學則對應的内容,具體要求:   

(1)  如果周内, 我們上課;如果是周末,那麼我們搞活動;

(2)  如果是周末,如果下雨,我們搞室内,再根據室内的人數選擇打遊戲還是看書

(3)  如果是周末,如果不下雨,我們搞室外活動
           
public class IfDemo3{
	public static void main(String[] args){
			
			boolean isWeekend = true;
			boolean isRain = true;
			int joinPersonNum = 5;
			
			if(isWeekend){
				if(isRain){
					if(joinPersonNum>5){
						System.out.println("打遊戲");
					}else{
						System.out.println("看書");
					}
				}else{
					System.out.println("室外活動");
				}
				
			}else{
				System.out.println("上課");
			}
           

補充說明:

'表達式的類型':表達式的輸出類型為表達式計算結果的類型。

條件: 即()裡邊的内容

##########

a. 可以是一個表達式
   1.第一類表達式: 常量表達式 -- 2*2,6-5
   2.第二類表達式: 包含變量的表達式 

eg:
   int a = 5;
   a*3 (結果15,表達式最終被當做的類型就是int類型))

   double num = 1.5;
   num * 4 (6.0, 表達式最終被當做的類型就是double類型)

##########

b. boolean類型 
表達式需要最終輸出為boolean類型

例如:score=30,

     (score>90)-->(flase)

##########

 c. 尖括号即:{}:
  注意: 可以省略,當我們在條件成立的時候,僅需要'執行一行代碼'的時候,可以省略掉尖括号
             雖然可以省略掉,但是按照規範性和可讀性,我們始終都需要{}
           

4.循環控制

#  結構:

while(循環條件){
   //循環實作的代碼
}

循環條件: 可以是一個變量,也可以是一個字面的常量; 可以是我們的表達式(常量表達式,包含變量的表達式)
        
類型: boolean 

特點: 先判斷後執行
           

1)   while 循環

練習6:求1到50之間偶數的和

public class ClassTestDemo1{
	
	public static void main(String[] args){
			int minNum = 1;
			final int MAX_NUM = 50;
			int sum = 0;
			
			while(minNum<=MAX_NUM){
				sum += (minNum%2==0)?minNum:0;//三元運算符
				minNum++;
			}
			
			System.out.println(sum);
	}
	
}
           

2)   do .. while循環

#  結構:

do{
    //實作的代碼

} while(循環的條件);
           

練習7:列印1到10之間的自然數

public class DoWhile{
	
	public static void main(String[] args){
		
		int maxNum = 10;
		int minNum = 11;
		
		//列印1到10之間的自然數
		do{
			System.out.println(minNum);
			minNum++;
		}while(minNum<=maxNum);
		
		
	}
	
}
           
注意:與while的''差別

特點: 先執行後判斷,不管條件是否成立,都會'至少先執行一次'do中的代碼
           

3)   for 循環

#  使用率最高的;

#  結構:

for(循環變量初始化 ;循環條件判斷; 循環變量的改變){
      //循環需要實作的邏輯
}
           

說明: 

首先for循環有三個部分組成:

a. 循環'變量初始化'
b. 循環'條件判斷'
c. 循環'變量的改變'

備注:這三個部分都可以省略,但是';'不可以省略

循環變量: 我們可以定義多個,對于循環變量的改變,我們也可以同時改變多組變量
           

執行流程:

a.循環變量初始化,這個在整個的循環過程中,隻會執行一次
b.進行循環條件的判斷,如果滿足條件,則執行,否則結束循環
c.當循環條件滿足之後,并且執行了我們循環中定義的代碼,最後就會進行循環變量的改變。
           

練習8:求自然數1到100之間偶數的和與奇數的和的差

public class ClassTestDemo2{
	
	public static void main(String[] args){
			int evenSum = 0;
			int unevenSum = 0;
	
			final int MAX_NUM = 100;
			
			for(int i = 1;i<=MAX_NUM;i++){
				if(i%2==0){
					evenSum+=i;
				}else{
					unevenSum+=i;
				}
			}
			
			System.out.println(evenSum - unevenSum);
	}
	
}
           

4)   foreach 循環

說明:不是一個正常的java提供的循環的方式,他隻是java提供的一種文法糖

'foreach': 對一種循環方式的命名,正常循環的簡化方式. 

文法糖: 針對基本的文法,提供了一種簡化的實作方式.
           

補充知識點: 

倆個關鍵字: 應用到循環控制中,continue的含義是跳出'當次'的循環,break的含義是跳出'當層循環'(多層循環)

continue:
在循環的代碼體中,如果遇到continue, 則會跳出當次循環,循環體内continue之後的代碼都不會執行,并且循環變量進行一次改變操作,
之後再次進行條件判斷,如果滿足條件,則進入循環,否則直接結束循環; 跳出的僅是continue外層直接包裹的循環.

break:
在循環的代碼體中,如果遇到break,則會跳出本循環代碼塊,break後的代碼不會執行。并且整個循環的過程結束。

break後退出的循環也是直接包圍break的循環。
           

練習9:輸出下列形狀

*
**
***
****
*****

分析:'第幾層就列印幾個','最外層列印的行',内層是列印'*的個數','每列印一層就需要換行一次'
           
public class Test04 {

	public static void main(String[] args) {

		for (int j = 1; j <= 5; j++) {

			for (int i = 1; i <= j; i++) {//若此行變成for (int i = j; i <= 5; i++){則是将上面圖形翻轉過來

				System.out.print("*");
			}
			System.out.println("");
		}

	}
}
           

練習10:在螢幕中列印出n行金字塔圖案,如n=5,圖案如下

分析:

   拆解:兩部分

   列印'空格'(個數=5-第幾行)和'列印*'(2*行數-1),後面的不需要列印,'每列印一行'需要換行

   涉及:算法,需要有'敏銳的觀察力'
           
/*
 *
 *         *      
 *        ***     
 *       *****    
 *      *******   
 *     *********
 */
public class Test2 {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) {
			for (int j = i + 1; j <= 5; j++) {// i變成i+1(技巧)
				System.out.print(" ");
			}
			for (int z = 1; z <= (2 * i - 1); z++) {
				System.out.print("*");
			}
			System.out.println();

		}
	}
}
           

備注:該篇章涉及一些程式設計思維,跟文法相關的比較少!