2015-03-03 306 views
0

我在for循環中嵌套while循環遇到麻煩。我理解的嵌套for循環:Java嵌套for while循環

for (int i = 0; i<5;i++) 
    { 
     for (int j=i;j<5;j++)  
     { 
      System.out.print("*"); 
     } 
     System.out.println(); 
    } 

當涉及到一個while循環中的for循環,我有點失落,有人可以解釋給我嗎?

Expected output: 
***** 
**** 
*** 
** 
* 
+2

您提供的代碼甚至不包含嵌套的「while」循環。請添加一個。 – Tdorno 2015-03-03 04:25:47

+0

時間做一些桌面檢查。拿出一支筆和一張紙,走路的代碼,更新你的價值... – MadProgrammer 2015-03-03 04:26:54

+1

或比筆和紙,斷點更好! – 2015-03-03 04:31:51

回答

1

for環和while環路之間的等價而言,這是基本上此:

for (INIT; CONDITION; POSTOP) {  INIT; 
    BODY;       while (CONDITION) { 
}          BODY; 
             POSTOP; 
            } 

(與我們不需要進入的範圍變化和其他類似的東西這裏)。

因此,與for/while解決方案來解決你的問題,你可以使用類似:

for (int i = 0; i < 5; i++) { 
    int j = i; 
    while (j < 5) { 
     System.out.print("*"); 
     j++; 
    } 
    System.out.println(); 
} 

它有時是有益的,通過在你的腦袋的代碼運行,用鋼筆和一點點紙保持變量,如:

i j output 
--- --- ------ 

如果你只是在你的HEA「執行」代碼的每一行(無論是你原來還是我for/while變體) d幾次迭代,你應該看到發生了什麼。而且,如果你並排執行它們,你會看到兩個變體之間的等同性。

基本上,外循環從0到4進行計數(迭代),運行內循環,然後輸出換行符。

對於每個那些迭代中,內循環計數從i至4以下,一個*每次(沒有換行符)輸出。

因此,在第一次外循環迭代中,內循環從0運行到4,輸出五顆星。

在第二次外循環迭代中,內循環從1運行到4,輸出四顆恆星。

依此類推,到最後的外環迭代,其中i4,所以內循環從4運行到4,輸出一個星。

在筆和紙的方法方面,你會得到的東西大致如下:

i j output 
--- --- ------ 
0 0  * 
0 1  * 
0 2  * 
0 3  * 
0 4  * 
      \n 
1 1  * 
1 2  * 
1 3  * 
1 4  * 
      \n 
2 2  * 
2 3  * 
2 4  * 
      \n 
3 3  * 
3 4  * 
      \n 
4 4  * 
      \n 
1

嗯,首先你for循環(一個或多個)可以寫成像

for (int i = 0; i < 5; i++) { 
    for (int j = i; j < 5; j++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 

接下來,讓我們來看看一個for loop的三個部分(從維基百科的鏈接)

for(INITIALIZATION; CONDITION; INCREMENT/DECREMENT){ 
    // Code for the for loop's body 
    // goes here. 
} 

我們可以移動到while循環像

INITIALIZATION; 
while (CONDITION) { 
    // Code for the while loop's body 
    // goes here. 
    INCREMENT/DECREMENT; 
} 

作爲一個實際的例子,

int j = i; 
while (j < 5) { 
    System.out.print("*"); 
    j++; 
} 
1

一個而內循環的循環可以製成像一個嵌套的循環,如果你只是更新while循環體內的計數器變量。或者,考慮一下for循環每次迭代真正說的是什麼。

for (int i = 0; i<5;i++) 
{ 
    int j = i; 
    // for (int j=i;j<5;j++)  
    while(j < 5) 
    { 
     System.out.print("*"); 
     j++; 
    } 
    System.out.println(); 
}