Java嵌套for while循环

时间:2015-03-03 04:24:26

标签: java design-patterns while-loop

我在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:
*****
****
***
**
*

3 个答案:

答案 0 :(得分: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
--- ---  ------

如果你只是&#34;执行&#34;代码的每一行(您的原始代码或我的for/while变体)在您的头脑中进行几次迭代,您应该看到发生了什么。而且,如果你并排进行,你会看到两种变体之间的等效性。

基本上,外循环从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 :(得分: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++;
}

答案 2 :(得分:1)

如果只是更新while循环体内的计数器变量,那么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();
}