Java知識總結 for迴圈

2021-06-20 00:53:11 字數 3970 閱讀 3456

在流程控制語句(條件語句和迴圈語句)中,對我造成最多困擾和模糊的就是for迴圈的多層巢狀,本篇文章通過例項分析巢狀式for迴圈。增強自己對for迴圈的理解。

一,for語句概述

for語句的功能是為了重複執行某些語句,直到某個條件得到滿足。

for語句格式如下:

for(表示式1;表示式2;表示式3)

迴圈體語句塊……

表示式1:初始化表示式,一般用來完成變數的初始化;

表示式2:迴圈條件表示式,結果為boolean型,用於判斷是否要繼續執行語句塊;

表示式3:執行完迴圈語句塊後操作的表示式。

*注意1:以上三個表示式和語句塊都可以為空。由此可得最簡單的for語句:

for(;;){}

該語句是乙個無線迴圈語句。

當表示式2為空時,其值預設為true,表示可以繼續執行迴圈語句。

*注意2:在迴圈體語句塊內建立的變數,作用範圍只在迴圈體內,也不能作用於表示式1、2、3.

例如:

for (;a<10 ;a++ )
是錯誤的,因為在語句塊中建立的變數a無法作用到表示式中。

同時,每次迴圈的時候,a都會被重新建立一次,所以每次迴圈中a不存在互相聯絡;

如:

for (int i=0;i<5 ; i++)
輸出結果為:

000

00

*注意3:表示式1內初始化的變數可以作用於迴圈體語句內,但是不能作用於for語句外。

for語句執行順序:

1)在執行for迴圈時,首先執行表示式1,完成變數初始化;

2)下一步,判斷表示式2的值,若為true,則進入迴圈體,否則跳出迴圈;

3)在執行完迴圈體後,接著執行表示式3,此時一輪迴圈結束;

4)第二輪迴圈從表示式2開始,重複2)3)的過程;

二,for舉例

下面通過例子實現for迴圈的基本應用

2.1需求:按順序列印0-9:

思路:由於需要列印的數是從零開始,所以在表示式1中初始化變數時,可以將變數值i定位0,int i=0;

要列印的最大數為9,所以表示式2的條件語句可以為 i<10,或者i<=9;

因為徐列印數i在遞增,所以表示式3可以寫作i++;

**如下:

for (int i=0;i<10 ; i++)
結果:

012

3456

789

2.2需求:列印100至200之間所有能被11整除的數:

思路:首先由於被迴圈數從100開始,所以表示式1的初始化變數可以定義為int 1=100;

因為迴圈至200結束,所以表示式2可以寫成i<201,或者i<=200;

因為被遍歷數是隨著迴圈次數在遞增,所以很明顯表示式3為i++;

通過以上3個表示式我們可以對100至200的數進行遍歷,在遍歷的同時,根據需求,要對每乙個被遍歷的數進行判斷是否能被11整除,這裡就需要用到if語句了;

下面是**實現:

for (int i=100;i<201 ; i++)
輸出結果:

110

121132

143154

165176

187198

順便說一句,計算機確實可以提高很大的效率,要是手動計算100到200之間能被11整除的數,確實挺複雜的。

2.3需求:求1至100之間所有奇數的和

思路:首先對1至100之間的奇數進行遍歷,這裡可以通過對1-100之間的數進行逐一遍歷的同時進行判斷是否為奇數。也可以同過將初始化變數的值定為1,每次迴圈將變數的值加2,以實現每次被遍歷的數都是奇數。

再遍歷奇數的同時,對獲得的奇數進行累加操作。

**如下:

int num=0;

for (int i=1;i<100 ; i+=2)

system.out.println(num);

結果為:

2500
三,for迴圈巢狀

當迴圈for(表示式1;表示式2;表示式3)

迴圈體語句塊……

中的迴圈體語句塊被執行一次時需要對某些**進行重複執行時,這就涉及到多重迴圈的巢狀。

for迴圈巢狀由於涉及到多層迴圈結構,並且個迴圈結構間經常存在互相影響,所以容易造成邏輯混亂。

正確處理多層for迴圈問題的核心在於分辨每層迴圈的功能和作用範圍,其次是控制每層迴圈的判斷條件。

舉例;3.1需求:用巢狀for迴圈列印

******

******

******

思路:上面的圖形中,涉及到兩個重複的操作,1迴圈:將同一行的內容重複列印多次。2迴圈:在每一行內對*進行重複列印;

所以需要通過兩個for迴圈對他們分別進行迴圈,1迴圈行的整體內容,迴圈的控制條件為行數;

2迴圈每一行內的*,迴圈的控制條件是每一行*的個數,也就是該行的列數。

而且由於1迴圈的行是由2迴圈的*組成的,所以2迴圈的結果是1迴圈的一部分,由此,我們可以確定1迴圈為外迴圈,2迴圈為內迴圈.

下面為**實現:

for(int x=0;x<4;x++)

system.out.println(); //換行

}

3.2需求:列印

*****

****

*****

*

思路:同樣根據3.1我們知道外迴圈控制行數,內迴圈控制列數,

與3.1不同的是:3.1中行數與列數不互相影響,而本題中列數會隨著行數的增加而減少;

這說明控制行數的變數同樣對列數有影響。

下面我們通過**實現;

for(int x=0;x<5;x++)

system.out.println(); //換行

}

3.3需求:列印下圖

*

********

*******

*****

****

思路:與3.2不同的是本題的列數受到多個因素控制,第一:每行的*個數;第二:每行*的初始位置,即每行開頭的空格數量。第三:前面兩個變數都同時收到行數的影響。

根據歸納發現:當行數小於等於4時,隨著行數增加,*個數增加,空格數在減少;

當行數大於4的時候,隨著行數增加,*個數減少,空格數增加。

根據這個規律,可以將內迴圈通過if語句分為兩種情況,並分別進行列數的控制

**實現:

for(int x=0;x<7;x++) 

for(int y=0;y<2*x+1;y++)

} else

for(int y=0;y<2*(7-x)-1;y++)

} system.out.println(); //換行

}

四,最後,補充幾個流程控制語句中易犯的問題

1.

if(條件表示式)else if(條件表示式)else if(條件表示式)else
在如上格式的if…else if語句中,該整體表示一句**。程式會從上往下,依次判斷if後的條件表示式是否滿足,如果滿足,則執行該if語句內的**塊,當執行完**塊後,程式會直接跳出該if…else if語句,不會再去判斷後面的條件表示式是否滿足,當所有條件表示式判斷完畢都不滿足條件後,則執行else語句。

2:在流程控制語句中,如果有單獨的break;語句或continue;語句存在,則在該**塊內後面不能有其他語句,因為後面的語句永遠不會被執行到。

如:

for(int i=0;i<10;i++)

迴圈知識總結

迴圈,是比較難的一部分 對於我 主要有以下三種形式 while 迴圈控制表示式 do while 迴圈控制表示式 for 初始化表示式 迴圈控制表示式 增值表示式 對於迴圈次數已知的程式,多採用for語句,未知次數的多用while語句,do while和while極其類似,只是在迴圈之前執行一次程式...

java知識總結

包的訪問控制 子類 同個包內 不同包內 public y y y protect y y n private n n n i o和流 四個抽象類 讀寫位元組 inputstream outputstream 讀寫unicode字元 reader writer iterator arraylist v...

JAVA知識總結

1.格式化數字 double amount 111.0 decimalformat df new decimalformat 0.00 system.out.println df.format amount decimalformat decimal new decimalformat 00 str...