2015-07-10 45 views
0

循環的情況,我的工作,通過「爪哇 - 由赫伯特·希初學者指南」我的路。我希望這個問題不是太荒謬。它是關於while循環條件的,while循環位於for循環中。該代碼示例是這一個:而在Java

public static void main(String[] args) { 

    int e; 
    int result; 

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

     result = 1; 
     e = i; 

     while (e > 0) { 

      result *= 2; 
      e--;  
     } 
     System.out.println("2 to the " + i + " power is " + result);  
    } 
} 

我不明白e的遞減,即while (e > 0)後寫的範圍之內。由於e = i,並且i遞增,所以我認爲在第一次執行for循環之後,e應該大於0。如果e不減少,程序將無法正常運行。爲什麼在這個例子中遞減e必要的?

+0

因爲如果你不這樣做,'而(E> 0)'會*** ***始終評估爲真,那麼你將有一個死循環。 – sstan

+0

'如果e不減少,程序將無法正常運行。爲什麼在這個例子中遞減e必須?'因爲如果程序沒有遞減,程序將不能正常運行。你自己回答了這個問題。 – Jashaszun

+0

如果在e遞減並運行代碼後添加'System.out.println(e)',它應該變得清晰。 –

回答

2

他們在那裏做的是對於我的每次迭代,他們將結果乘以2倍,i次。

的漫遊將是

I = 0,E = 0,結果不相乘,輸出2到0的功率爲1

I = 1,E = 1,結果乘以一個時間由2,2到1的功率爲2

他們正在遞減è那裏「倒數我」下調至0 E是重置每次,並總是進入上迭代while循環在第一個之後,並且一旦它計數到零就會一直退出while循環。

2

如果你不這樣做e--你會陷入無盡的while loop

看它是這樣的:

讓我們進入for循環的隨機迭代。

比方說i=5

然後e=i這樣e=5

我們現在跳進while循環。

while (e >0) { 
    result*=2; 
    e--; 
} 

如果我們不這樣做e--e總是停留在5和while循環永遠不會終止。

通過這樣做e--e將在5,然後4開始,....然後0在while循環將結束,我們會跳回for循環,提高i(因而e),並重復整個處理。

0

while循環執行它們的任務,直到給定的條件爲假。假設e開始了爲大於0,不遞減它會導致它永遠循環下去。

在程序的觀點出發,爲了計算2 Ñ,這是由倍增2 n倍完成遞減e

0

如果使用電子不遞減,一旦for循環已經提前超過i=0,while循環將永遠執行。這是因爲在不改變e的值的情況下,e將總是大於0.因此,e必須遞減以便滿足退出條件。

1

簡單的文字說明

在while循環,你需要這樣的說法,因爲它的同時 條件變爲假,程序控制出來的,而 循環的,這將有助於避免無休止砍掉問題。

你問過爲什麼遞減e在這個程序中很重要?
答案:如果你不減少e然後(e> 0)總是返回真值,程序將進入無限循環(總是在while循環中)。

樣品迭代2當i = 2:
結果= 1
E = I = 2
而(E> 0)的計算結果爲真
所以導致= 1 * 2 = 2
E-- :E = 1

再次而(E> 0)的計算結果爲真,因爲E = 1> 0
結果= 2 * 2 = 4
E--:E = 0

立即再次檢查而(e> 0),它會評估爲false,while循環結束。

對於有幾樣更多的信息,請參考以下鏈接: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

0

讓我們考慮的一個特定實例的for循環,並說在實例E = 5(會出現這種情況時,我= 5)。 所以,我們運行while循環直到e大於0,這是5次。 這5次中的每一次,我們都將結果(最初爲1)乘以2並更新它。因此,在while循環的5次運行結束時,我們完成了2^5,然後我們打印出2給我的功率(5)是如此之多。 現在,該邏輯針對for循環的每個值執行。