【问题标题】:Printing out a Diamond with nested for loops用嵌套的 for 循环打印出 Diamond
【发布时间】:2012-09-14 10:35:23
【问题描述】:

对于我的 java 类,其中一个练习是使用嵌套的 for 循环打印出菱形。在练习中,您需要使用最少量的输出,同时使用嵌套的 for 循环。另一种规定是每次输出只能输出1个字符,例如单个空格、单个星号或单个结束行语句。

我已经完成了,但我想知道是否有更简单的方法可以做到这一点,或者是否有人有清理我的代码的提示。似乎最终写得比需要的要多。非常感谢任何帮助和提示。 :)

这是最终结果的样子:

这是我的代码:

public class Diamond 
{
    public static void main(String args[])
    {
        int b = 11; // secondary asterisk loop counter
        int ac = 2; // asterisk count
        int sc = 5; // space count
        int elc = 2; // end line count
        int slc = 1; // space loop count
        int sslc = 1; // secondary space loop count


        for(int e = 1; e < elc && elc < 12;e++)
        {   
            if(elc <= 6)
            {
                for(int a = 1; a < ac; a++)
                {
                        for(;sc <= 5 && sc > 0; sc--)
                        {
                            System.out.print(" ");
                        }

                        System.out.print("*");
                }

                ac += 2;
                sc = 5 - slc;
                slc += 1;
            }

            else if (elc > 6)
            {
                ac -= 2;
                sc = 1;


                for (; b < ac ; b++)
                {

                    for(;sc <= sslc && sc > -2; sc++) 
                    {
                        System.out.print(" ");
                    }

                    System.out.print("*");
                }

                b = 1;
                sslc += 1;

            }
            if(elc != 6)
            {
                System.out.println();
            }

            elc += 1;
        }
    }
}

【问题讨论】:

    标签: loops for-loop nested


    【解决方案1】:
    public class ASultan
    {
       public static void main(String[] args) {
    
        int size = 9;
    
        for (int i = 1; i < size; i += 2) {
            for (int k = size; k >= i; k -= 2) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    
        for (int i = 1; i <= size; i += 2) {
            for (int k = 1; k <= i; k += 2) {
                System.out.print(" ");
            }
            for (int j = size; j >= i; j--) {
                System.out.print("*");
            }
            System.out.println();
        }
    
      }
    }
    

    【讨论】:

      【解决方案2】:

      您可以尝试将钻石的 4 个边缘写成方程式(例如 x+y=4;x-y=2...)。然后只需对网格中的每个单元格进行嵌套循环,看看是否应该打印空格或星号。测试看起来像

      如果 f1(x,y) 或 f2(x,y) 或 f3(x,y) 或 f4(x,y):打印 '*' 否则打印 ' '

      其中 f1,f2,f3,f4 是 4 条对角线的方程。

      如果需要尽量减少要打印的字符数,要么使用数组进行准备,然后忽略尾随空格;或使用一些临时规则(比如每一行只有 2 星,除了第一个和最后一个......)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-27
        • 2018-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多