【问题标题】:Re-writing a for loop to a while loop将 for 循环重写为 while 循环
【发布时间】:2016-10-21 00:27:05
【问题描述】:

我试图弄清楚如何将以下 for 循环转换为 while 循环,我非常接近,因为输出与原始循环非常相似,但缺少空格。基本上它是通过显示小 * 符号在屏幕上打印一个 X。在我尝试重写它时,我得到了相同数量的 * 但没有空格,所以它在下一行打印下一个 *,这使它成为一条直线。

编辑:我已经按照建议重新分配了 j = MIN,但我也忘了提到,问我的问题是我必须将 for 转换为 while 循环,并替换一系列 if-else 语句只有一个 if-else-if-else 语句。

这是原文:

公开课实践 {

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

    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();
    }

}

}

这是我的尝试:

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

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

}

}

【问题讨论】:

  • 你试过什么?您是否尝试过单步执行代码以准确查看差异发生在哪里?这也应该不是很难通过一些试验和错误来弄清楚。
  • 不要合并 if 语句.. 保持原样

标签: java loops


【解决方案1】:

这是您的解决方案:

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

        while (i <= MAX) {
            j = MIN;
            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++;
        }
    }

只修改一个如果:

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

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

【讨论】:

  • 对不起,我忘了在帖子中提到,问我的问题是我必须将 for 转换为 while 循环,并仅用一个 if 替换一系列 if-else 语句-else-if-else 语句。
【解决方案2】:

您需要在嵌套的while 循环之前初始化j = MIN; 而不是j = MAX;

此外,嵌套的 if-else 构造与原始构造不等价。

【讨论】:

    【解决方案3】:

    试试这个:

    public static void main(String[] args) 
    {
        final int MIN = 1;
        final int MAX = 7;
        int i = MIN;
        int j = MIN;
    
        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(" ");
            }
            System.out.println();
        }
    
    }
    

    【讨论】:

    • 对不起,我忘了在帖子中提到,问我的问题是我必须将 for 转换为 while 循环,并仅用一个 if 替换一系列 if-else 语句-else-if-else 语句。
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2018-08-13
    • 2017-09-26
    • 2018-02-22
    相关资源
    最近更新 更多