文章目錄
不論哪一種程式設計語言,都會提供兩種基本的流程控制結構:分支結構和循環結構。其中分支結構用 于實作根據條件來選擇性地執行某段代碼,循環結構則用于實作根據循環條件重複執行某段代碼。Java 同樣提供了這兩種流程控制結構的文法,Java提供了 if和switch兩種分支語句,并提供了 while、do while 和for三種循環語句。除此之外,JDK5還提供了一種新的循環:foreach循環,能以更簡單的方式來遍 曆集合、數組的元素。Java還提供了 break和continue來控制程式的循環結構。
塊(即複合語句)是指由一對大括号括起來的若幹條簡單的 Java 語句。塊确定了變量的作用域。一個塊可以嵌套在另一個塊中。
public static void main(String口 args) {
//mian方法塊
int n; {
//嵌套一個塊
int k;
}
}
任何程式設計語言中最常見的程式結構就是順序結構。順序結構就是程式從上到下逐行地執行,中間沒 有任何判斷和跳轉。
如果main方法的多行代碼之間沒有任何流程控制,則程式總是從上向下依次執行,排在前面的代 碼先執行,排在後面的代碼後執行。這意味着:如果沒有流程控制,Java方法裡的語句是一個順序執行 流,從上向下依次執行每條語句。
if 語句的文法:
if(布爾表達式)
{
//如果布爾表達式為true将執行的語句
}
if…else語句
if 語句後面可以跟 else 語句,當 if 語句的布爾表達式值為 false 時,else 語句塊會被執行:
if(布爾表達式){
//如果布爾表達式的值為true,執行此代碼塊
}else{
//如果布爾表達式的值為false,執行此代碼塊
}
if…else if…else 語句
if 語句後面可以跟 else if…else 語句,這種語句可以檢測到多種可能的情況。
使用 if,else if,else 語句的時候,需要注意下面幾點:
- if 語句至多有 1 個 else 語句,else 語句在所有的 else if 語句之後。
- if 語句可以有若幹個 else if 語句,它們必須在 else 語句之前。
- 一旦其中一個 else if 語句檢測為 true,其他的 else if 以及 else 語句都将跳過執行。
if(布爾表達式 1){
//如果布爾表達式 1的值為true執行代碼
}else if(布爾表達式 2){
//如果布爾表達式 2的值為true執行代碼
}else if(布爾表達式 3){
//如果布爾表達式 3的值為true執行代碼
}else {
//如果以上布爾表達式都不為true執行代碼
}
可以在一個if……else代碼塊中嵌套另一個if……else代碼塊:
if(布爾表達式 1){
如果布爾表達式 1的值為true執行代碼
if(布爾表達式 2){
如果布爾表達式 2的值為true執行代碼
}
}else{
}
switch語句由一個控制表達式和多個case标簽組。
switch(expression){
case value :
//語句
break; //可選
case value :
//語句
break; //可選
//你可以有任意數量的case語句
default : //可選
//語句
}
switch分支語句規則:
- switch 語句中的變量類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支援字元串 String 類型了,同時 case 标簽必須為字元串常量或字面量。
- switch 語句可以擁有多個 case 語句。每個 case 後面跟一個要比較的值和冒号。
- case 語句中的值的資料類型必須與變量的資料類型相同,而且隻能是常量或者字面常量。
- 當變量的值與 case 語句的值相等時,那麼 case 語句之後的語句開始執行,直到 break 語句出現才會跳出 switch 語句。
- 當遇到 break 語句時,switch 語句終止。程式跳轉到 switch 語句後面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程式會繼續執行下一條 case 語句,直到出現 break 語句。
- switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最後一個分支(可以在任何位置,但建議在最後一個)。default 在沒有 case 語句的值和變量值相等的時候執行。default 分支不需要 break 語句。
執行個體
public class Test {
public static void main(String args[]){
//char grade = args[0].charAt(0);
char grade = 'C';
switch(grade)
{
case 'A' :
System.out.println("優秀");
break;
case 'B' :
case 'C' :
System.out.println("良好");
break;
case 'D' :
System.out.println("及格");
break;
case 'F' :
System.out.println("你需要再努力努力");
break;
default :
System.out.println("未知等級");
}
System.out.println("你的等級是 " + grade);
}
}
運作結果:
良好
你的等級是 C
循環語句可以在滿足循環條件的情況下,反複執行某一段代碼,這段被重複執行的代碼被稱為循環 體。當反複執行這個循環體時,需要在合适的時候把循環條件改為假,進而結束循環,否則循環将一直 執行下去,形成死循環。
while( 布爾表達式 ) {
//布爾表達式為 true,循環就會一直執行下去
}
對于 while 語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。
do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。
do {
//代碼語句
}while(布爾表達式);
布爾表達式在循環體的後面,是以語句塊在檢測布爾表達式之前已經執行了。 如果布爾表達式的值為 true,則語句塊一直執行,直到布爾表達式的值為 false。
雖然所有循環結構都可以用 while 或者 do…while表示,但 Java 提供了另一種語句 —— for 循環,使一些循環結構變得更加簡單。
for循環執行的次數是在執行前就确定的。文法格式如下:
for(初始化; 布爾表達式; 更新) {
//代碼語句
}
文法說明:
- 最先執行初始化步驟。可以聲明一種類型,但可初始化一個或多個循環控制變量,也可以是空語句。
- 然後,檢測布爾表達式的值。如果為 true,循環體被執行。如果為false,循環終止,開始執行循環體後面的語句。
- 執行一次循環後,更新循環控制變量。
- 再次檢測布爾表達式。循環執行上面的過程。
- 循環圓括号中隻有兩個分号是必需的,初始化語句、循環條件、疊代語句部分都是可以省略的, 如果省略了循環條件,則這個循環條件預設為true,将會産生一個死循環。
public class Test {
public static void main(String args[]) {
//從10輸出到19
for(int x = 10; x < 20; x = x++) {
System.out.print("value of x : " + x );
System.out.print("\n");
}
}
}
Java5 引入了一種主要用于數組的增強型 for 循環。
Java 增強 for 循環文法格式如下:
for(聲明語句 : 表達式)
{
//代碼句子
}
- 聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型比對。其作用域限定在循環語句塊,其值與此時數組元素的值相等。
- 表達式:表達式是要通路的數組名,或者是傳回值為數組的方法。
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names ={"James", "Larry", "Tom", "Lacy"};
//周遊輸出數組
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
}
如果把一個循環放在另一個循環體内,那麼 就可以形成嵌套循環。
執行個體
public class DiamondTest {
//循環輸出菱形
public static void main(String[] args) {
int row=6; //行數
if (row >= 1){
int x,y;
//輸出上半部分正三角形
for(x = 1; x <= row; x++){
for (y = 1; y <= row - x;y++) {
System.out.print(" ");
}
for (y = 1; y <= 2 * x - 1;y++) {
System.out.print("*");
}
System.out.println();
}
//輸出下半部分正三角形
for(x = 1; x <= row; x++){
for (y = 1; y <= x;y++) {
System.out.print(" ");
}
for (y = 1; y <= 2 *(row- x) - 1;y++) {
System.out.print("*");
}
System.out.println();
}
}
}
結果:
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
break 主要用在循環語句或者 switch 語句中,用來跳出整個語句塊。
public class Test {
public static void main(String args[]) {
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ) {
// x 等于 30 時跳出循環
if( x == 30 ) {
break;
}
System.out.print( x );
System.out.print("\n");
}
}
}
continue的功能和break有點類似,差別是continue是忽略本次循環剩下語句,接着開始下一次 循環,并不會終止循環;而break則是完全終止循環本身。
public class WaterTest {
/**
* 現在用一個鍋爐燒熱水,假設鍋爐的容量為100,當流出的水量超過100時,
* 就進行加 熱,直到水開再流開水。
* @param args
*/
public static void main(String[] args) {
boolean isBoil = true;
int i = 0;
while (true) {
if (!isBoil) {
continue;
}
i++;
if (i < 100) {
i++;
System.out.println("開水");
} else {
isBoil = false;
}
}
}
}
return關鍵字并不是專門用于結束循環的,return的功能是結束一個方法。當一個,這 個方法将被結束。
public class ReturnTest
(
public static void main(String[] args){
// 一個簡單的for循環
for (int i = 0; i < 3 ; i++ ) {
System, out .print丄n ("i 的值是"+ i);
if (i == 1){
return;
}
System.out .printIn ("return 後的輸岀語句");
}
}
參考:
【1】:《瘋狂Java講義》
【2】:《Java核心技術 卷一》
【3】:
https://www.runoob.com/java/java-if-else-switch.html