簡體   English   中英

Java為while循環嵌套

[英]Java nested for while loops

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

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

當談到for循環中的while循環時,我有點迷失了,有人可以向我解釋嗎?

Expected output:
*****
****
***
**
*

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
--- ---  ------

如果您只是在腦海中“執行”代碼的每一行(無論是原始代碼還是for/while變體)幾次,您都應該看到正在發生的事情。 而且,如果您並排執行它們,將會看到兩個變體之間的等效性。

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

對於這些迭代中的每一個 ,內部循環的計數從i到4(含4),每次輸出一個* (不帶換行符)。

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

在第二個外循環迭代中,內循環從14運行,輸出四顆星。

依此類推,直到最后一次外循環迭代,其中i4 ,因此內循環從44運行,輸出一顆星。

就筆和紙方法而言,您將獲得以下幾方面的好處:

 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

好吧,首先您的for循環可以寫成

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

接下來,讓我們看一下for循環的三個部分(來自Wikipedia鏈接)

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++;
}

如果僅在while循環主體內更新counter變量,則for循環內的while循環可以像嵌套的for循環一樣工作。 或者,考慮一下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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM