111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Control Flow
 | ||
| localeTitle: 控制流
 | ||
| ---
 | ||
| # 控制流
 | ||
| 
 | ||
| 控制流语句正是该术语的含义。它们是基于决策,循环和分支改变执行流程的语句,以便程序可以有条件地执行代码块。
 | ||
| 
 | ||
| 首先,Java具有以下用于流控制的构造:
 | ||
| 
 | ||
| *   `if`
 | ||
|     
 | ||
|     ```java
 | ||
|     if( <expression that results in a boolean> ){ 
 | ||
|         //code enters this block if the above expression is 'true' 
 | ||
|      } 
 | ||
|     
 | ||
|     ```
 | ||
|     
 | ||
| *   `if...else`
 | ||
|     
 | ||
|     ```java
 | ||
|     if( <expression that results in a boolean> ){ 
 | ||
|         //execute this block if the expression is 'true' 
 | ||
|      } else{ 
 | ||
|         //execute this block if the expression is 'false' 
 | ||
|      } 
 | ||
|     
 | ||
|     ```
 | ||
|     
 | ||
| *   `switch`
 | ||
|     
 | ||
| 
 | ||
| 当有多个值和要检查的案例时,Switch是`if...else`构造的替代方案。
 | ||
| 
 | ||
| ```java
 | ||
| switch( <integer / String / Enum > ){ 
 | ||
|     case <int/String/Enum>: 
 | ||
|         <statements> 
 | ||
|         break; 
 | ||
|     case <int/String/Enum>: 
 | ||
|         <statements> 
 | ||
|         break; 
 | ||
|     default: 
 | ||
|         <statements> 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| 注:程序流程`falls through`下一`case` ,如果`break`语句丢失。例如,假设你对办公室里的每个人都说标准的“你好”,但对于坐在你旁边的女孩来说,你对你的老板说得好脾气。表示方式如下:
 | ||
| 
 | ||
| ```java
 | ||
| switch(person){ 
 | ||
|     case 'boss': 
 | ||
|         soundGrumpy(); 
 | ||
|         break; 
 | ||
|     case 'neighbour': 
 | ||
|         soundExtraNice(); 
 | ||
|         break; 
 | ||
|     case 'colleague': 
 | ||
|         soundNormal(); 
 | ||
|         break; 
 | ||
|     default: 
 | ||
|         soundNormal(); 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| ```
 | ||
| Note: The `default` case runs when none of the `case` matches. Remember that when a case has no `break` statement, it `falls through` to the next case and will continue to the subsequent `cases` till a `break` is encountered. Because of this, make sure that each case has a `break` statement. The `default` case does not require a `break` statement. 
 | ||
| ```
 | ||
| 
 | ||
| *   `nested statements`
 | ||
| 
 | ||
| 可以嵌套任何先前的控制流。这意味着您可以嵌套`if` , `if..else`和`switch..case`语句。也就是说,您可以将这些语句的任意组合放在另一个语句中,并且`nesting`的深度没有限制。
 | ||
| 
 | ||
| 例如,让我们考虑以下场景:
 | ||
| 
 | ||
| *   如果你的钱少于25美元,你可以给自己一杯咖啡。
 | ||
| *   如果你有超过25美元但不到60美元,你会得到一个体面的饭菜。
 | ||
| *   如果你有超过60美元但不到100美元,你会得到一顿不错的美食和一杯葡萄酒。
 | ||
| *   然而,当你有超过100美元,取决于你与谁在一起,你要么去一个烛光晚餐(与你的妻子)或你去体育酒吧(与你的朋友)。
 | ||
| 
 | ||
| 表示这一点的方法之一是:
 | ||
| 
 | ||
| ```java
 | ||
| int cash = 150; 
 | ||
|  String company = "friends"; 
 | ||
|  
 | ||
|  if( cash < 25 ){ 
 | ||
|     getCoffee(); 
 | ||
|  } else if( cash < 60 ){ 
 | ||
|     getDecentMeal(); 
 | ||
|  } else if( cash < 100 ){ 
 | ||
|     getDecentMeal(); 
 | ||
|     getGlassOfWine(); 
 | ||
|  } else { 
 | ||
|     switch(company){ 
 | ||
|         case "wife": 
 | ||
|             candleLitDinner(); 
 | ||
|             break; 
 | ||
|         case "friends": 
 | ||
|             meetFriendsAtSportsBar(); 
 | ||
|             break; 
 | ||
|         default: 
 | ||
|             getDecentMeal(); 
 | ||
|     } 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| 在此示例中,将执行`meetFriendsAtSportsBar()` 。
 | ||
| 
 | ||
|  [运行代码](https://repl.it/CJZi/1) |