理解一:
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
來源於網絡