将for循环转换为while循环,产生与预期结果不同的结果

时间:2019-06-16 00:19:02

标签: java loops

情况:

我正在尝试将以下for循环转换为while循环:

final int MIN = 1;
final int MAX = 7;
int i=MIN,j=MIN;

for(i=MIN; i<=MAX;i++)
{
    for(j=MIN;j<=MAX;j++)
    {
        if(i==j)
            if(i==(MIN+MAX)/2)
                System.out.print("o");
            else
                System.out.print("*");
        else if (i+j == MIN+MAX)
            System.out.print("*");
        else
            System.out.print(" ");
    }
    System.out.println();
}

我认为这很简单:

while(i<=MAX)
{
    while(j<= MAX)
    {
        if(i==j)
            if(i==(MIN+MAX)/2)
                System.out.print("o");
            else
                System.out.print("*");
        else if (i+j == MIN+MAX)
            System.out.print("*");
        else
            System.out.print(" ");
        j++;
    }
    System.out.println();
    i++;
}

但是,由于某些未知原因,当i> 1时,它永远不会进入内部while循环。我不确定自己在做什么错...

1 个答案:

答案 0 :(得分:2)

每次循环启动都会给出MIN的j值。 While循环并非如此,因此您必须在cirtucs循环后替换值。如果您未在内循环之前声明j-MIN;,则在第一个内循环迭代之后j将为8,因此它不是<= 8

 public static void main(String []args){
    final int MIN = 1;
    final int MAX = 7;
    int i=MIN,j=MIN;

    while(i<=MAX)
    {
        j=MIN;  //ADDED
        while(j<= MAX)
        {
            if(i==j)
                if(i==(MIN+MAX)/2)
                    System.out.print("o");
                else
                    System.out.print("*");
            else if (i+j == MIN+MAX)
                System.out.print("*");
            else
                System.out.print(" ");
            j++;
        }
        System.out.println();
        i++;
    }
    }