[英]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),每次輸出一個*
(不帶換行符)。
因此,在第一次外循環迭代中,內循環從0
到4
運行,輸出五顆星。
在第二個外循環迭代中,內循環從1
到4
運行,輸出四顆星。
依此類推,直到最后一次外循環迭代,其中i
為4
,因此內循環從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
好吧,首先您的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.