2014-04-23 92 views
0

任何人都可以幫助我爲什麼這個for循環不會做這個while循環同樣的事情?這個while循環不會讓我回到相同的循環

public class HelloWorld { 

    public static void main(String[] args) { 
     System.out.println("Hello World"); 

     int Bits = 0; 
     int dataLength = 8; 

     System.out.println(dataLength); 

     /* 
     for(int i = (int) (Math.pow(2,numCheckBits) -1); i < dataLength + Bits; i++){ 
      numCheckBits = i; 
     } 
     */ 

     while ((Math.pow(2, Bits) - 1) < dataLength + Bits) 
      Bits++; 

     System.out.println(Bits); 
    } 
} 

回答

1
for(int i = (int) (Math.pow(2,numCheckBits) -1); i < dataLength + Bits; i++){ 
    numCheckBits = i; 

當循環開始,i設置爲2 numCheckBits - 1。然後,每次通過循環時,它都增加1.因此,如果numCheckBits以0開始,則i將取值1,2,3,...,dataLength + Bits - 1。在循環內重新指定numCheckBits具有沒有對此產生影響,因爲使用numCheckBits的表達式僅在循環開始時計算。

while ((Math.pow(2, Bits) - 1) < dataLength + Bits) 
    Bits++; 

在這種情況下,涉及Math.pow表達每次被評估。這意味着Bits取值爲0,1,... floor(log (dataLength + Bits))或類似的東西。

for循環,就相當於你的while循環將有Math.pow第二表達,從而使該值將針對dataLength + Bits每次進行測試:

for (int i = 0; Math.pow(2,i)-1 < dataLength + i; i++) { 
} 

[或任何你想在循環內部做 - 你可能不需要numCheckBits]。

+0

我將如何去做這個循環做什麼,而這是while –

+0

@ user3558924哈,哈,我加了,當你問... – ajb

+0

哈哈好吧。但在While循環中,Bits ++對我來說很重要,因爲最後值最終爲int值4,所以for循環提供了相同的int值 –

2

for循環

for(int i = (int) (Math.pow(2,numCheckBits) -1); i < dataLength + Bits; i++){ 
    numCheckBits = i; 
} 

while循環的確切翻譯是:

int i= (int) (Math.pow(2, numCheckBits) -1); 
while (i < dataLength + Bits) 
{ 
    numCheckBits = i; 
    i++; 
}