for循環、while循環區別


 理解一:

1、while適合用於狀態變化控制,說高大上點就是while適合做狀態機,而for僅僅是為了循環而循環

2、另外一個區別,for循環一般都是這么用的,for(int i=xx;i<xx;i++);重點是關於循環控制變量i是在for中聲明的(不是說不可以聲明在for外面,只是一般都是這么用),這樣的話,在for循環結束后,i會被釋放,可以優化內存空間,如果你在8051單片機上寫過程序,你的內存只有2k-8k,你會格外珍惜內存的使用;而相對來說,while循環跳出后控制變量不會被釋放,還可以繼續使用

3、和一有點類似,通常剛學程序的時候會告訴你應盡量避免死循環,但是慢慢你會發現會有很多

while(1){。。。。};比如說偵聽,我們需要一個死循環來不斷進行偵聽,然后發現有接入就開辟一個新的線程去處理(類比FTP機制)。

 

理解二:

一個需求:使用for循環和while循環都可以去實現,那么到底兩者之間有什么區別? 

從內存角度考慮: 

局部變量在棧內存中存在,當for循環語句結束,那么變量會及時被gc(垃圾回收器)及時的釋放掉,不浪費空間 

如果使用循環之后還想去訪問循環語句中控制那個變量,使用while循環

從應用場景角度考慮:

如果一個需求明確循環的次數,那么使用for循環(開發中使用for循環的幾率大於while循環) 

如果一個需求,不知道循環了多少次,使用while循環 

*舉例:吃葡萄!  

public class WhileDemo4 {

public static void main(String[] args) {

//使用for循環

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

System.out.println("我愛高圓圓");

}

//訪問for循環中控制的那個變量x

// System.out.println(x);

 

//使用while循環

int x = 1 ;

while(x<=5) {

System.out.println("我愛高圓圓"); x ++ ;

}

//可以訪問變量

System.out.println(x);

}

}

 

理解三:

做循環的時候,首先要把思路理清楚,回答四個問題:

(1)初始化條件?

(2)控制循環的條件?

(3)反復做的事?

(4)怎樣進入下一循環?

eg:對1到100求和

(1)初始化條件:sum=0;num=1

(2)控制循環的條件:num<=100

(3)反復做的事:sum = sum  + num(或sum += num)

(4)怎樣進入下一循環:num++

這樣就能輕松寫出循環

int sum = 0;

int num = 1;

while(num <= 100) {

    sum+=num;

    num++;

}

用do......while改寫

int sum = 0;

int num = 1;

do {     sum += num;     num++;

}while(num<=100)

用for循環改寫

int sum = 0;

for(int num=1; num<=100;num++){

    sum += num;

}

for循環是比較難理解的,但是我們可以將num=1; num<=100看作num的取值范圍為[1,100],步長為1。這樣就有利於for循環的理解。

綜上,三種循環是可以替換的,但是三種循環也有一定的差異:

for循環適用於知道范圍的情況(或知道循環次數的情況),當循環次數(或范圍)不確定時用while循環或do......while循環。

while循環和do.......循環,當第一次進入循環就不滿足條件時,while循環不做,do......while執行一次。其他情況輸出結果是一樣的。 

 

區別:

while循環:默認按行(回車符“\r”、換行符“\n”)分割文件

for循環:默認按照任意空白字符(如:空格、tab)等分割文件,可以使用IFS進行自定義

有一文本文件如下,每行有兩個字符串/空格分開。
$ cat list.txt 
Gly G
Ala A

for line in `cat list.txt`
do
echo $line
done
得到結果如下:

Gly
G
Ala
A

============
while read line
do 
echo $line
done list.txt

運行得到結果如下:

Gly G
Ala A

來源於網絡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM