【问题标题】:How to make horizonal star patterns?如何制作水平星形图案?
【发布时间】:2022-12-06 00:06:04
【问题描述】:

如果我想把下图做成水平的星星图案,怎么做呢?

我想做这个:

  *           *
 ***         ***
*****       *****
 ***         ***
  *           *

但是在我的代码中这样打印(它不起作用)

  *
 ***
*****
 ***
  *
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

这是我的代码 我尝试制作第一张图片以使用 Stringbuiler,它不起作用.. 请告诉我任何想法。

    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        test(3,stringBuilder);
        test(5,stringBuilder);
        print(stringBuilder);
    }

    public static void test(int n,StringBuilder stringBuilder){
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n-i-1;j++){
                stringBuilder.append(" ");
            }
            for(int k=0;k<2*i+1;k++){
                stringBuilder.append("*");
            }
            stringBuilder.append(System.getProperty("line.separator"));
        }

        for(int i=n-1;i>0;i--)
        {
            for(int j=n-1;j>=i;j--){
                stringBuilder.append(" ");
            }
            for(int k=2*i-1;k>0;k--){
                stringBuilder.append("*");
            }
            stringBuilder.append(System.getProperty("line.separator"));
        }
    }

    public static void print(StringBuilder stringBuilder){
        System.out.println(stringBuilder);
    }

【问题讨论】:

  • 请比“它不起作用”更具体。
  • 如果你想水平打印,那么你不能先完成一个模式然后开始第二个,因为终端总是按行运行。您需要重新设计您的算法,以便完全打印应该位于第一行的每个部分,然后完全打印第二行,依此类推。

标签: java


【解决方案1】:

您必须改变他们执行算法的方式。 你必须首先得到你想要打印的所有东西,然后逐行绘制它们。

【讨论】:

    【解决方案2】:

    您在每行 * 之后附加一个行分隔符。

    stringBuilder.append(System.getProperty("line.separator"))
    

    这意味着当它构建第二个菱形时,它从第一个菱形底部下方的下一行开始。因此,第二颗钻石将低于第一颗钻石。

    你需要同时建造两颗钻石, 例如为第一个钻石附加第一行 *,然后为第二个钻石附加第一行 *,然后换行。 重复直到添加完所有行。

    【讨论】:

      【解决方案3】:
      public static void main(String[] args) {
       StringBuilder stringBuilder = new StringBuilder();
       test(3, stringBuilder);
       test(5, stringBuilder);
       print(stringBuilder);
       }
      
      public static void test(int n, StringBuilder stringBuilder) {
      // Print the upper part of the star pattern
      for (int i = 0; i < n; i++) {
      // Insert spaces at the beginning and end of the row
      stringBuilder.insert(0, " ");
      stringBuilder.append(" ");
      
      
      // Insert stars in the row
      for (int k = 0; k < 2 * i + 1; k++) {
          stringBuilder.append("*");
      }
      
      // Insert newline at the end of the row
      stringBuilder.append(System.getProperty("line.separator"));
      }
      
       // Insert spaces between the upper and lower parts of the star pattern
       for (int i = 0; i < n - 1; i++) {
         stringBuilder.append(" ");
      }
      
      // Print the lower part of the star pattern
      for (int i = n - 1; i > 0; i--) {
      // Insert spaces at the beginning and end of the row
      stringBuilder.insert(0, " ");
      stringBuilder.append(" ");
      
      // Insert stars in the row
      for (int k = 2 * i - 1; k > 0; k--) {
          stringBuilder.append("*");
      }
      
      // Insert newline at the end of the row
      stringBuilder.append(System.getProperty("line.separator"));
      }
      }
      
      public static void print(StringBuilder stringBuilder) {
       System.out.println(stringBuilder);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-09
        • 2013-02-19
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        相关资源
        最近更新 更多