【问题标题】:How to output an ASCII star patterns in a table format?如何以表格格式输出 ASCII 星形图案?
【发布时间】:2017-05-15 04:10:17
【问题描述】:

我的代码问题需要帮助。我必须编写一个以表格格式显示星形图案的程序。

我并不是在寻找确切的代码,我想自己弄清楚,所以任何建议和提示都会有很大帮助。

// Pattern A Loop
for (int PatternA = 0; PatternA <= 9; PatternA++) { // outerLoop Pattern A
    for (int PatternAI = 0; PatternAI <= PatternA; PatternAI++) { // Inner Loop
        System.out.print("+");
    }
    System.out.println();
}

// Pattern B Loop
for (int PatternB = 0; PatternB <= 10; PatternB++) { // outer loop Pattern B
    for (int PatternBI = 9; PatternBI >= PatternB; PatternBI--) { //Inner Loop
        System.out.print("+");
    }
    System.out.println();
}

【问题讨论】:

    标签: java loops for-loop nested-loops ascii-art


    【解决方案1】:

    既然你说你不想要一个完整的解决方案,这里有一些提示。

    首先,由于您的表格必须在同一行打印来自PatternAIPatternBI 的材料,因此您应该将这些循环一起移动。这将涉及使外循环对两者都有效。您可以在 for 循环中使用多个变量:

    for (int i = 0, j = 0; i < 10 && j < 2; i++, j++)
    

    您还需要一些方法来分离模式。您可以使用空格,但它们的数量会有所不同(实际上与+ 的方式相同,因此您可以使用它)。选项卡也可以工作,而且更简单一些。但是,当行达到一定长度时,您将不得不在使用的选项卡数量之间进行更改。

    这就是它的全部内容。让我知道我的提示是否有帮助,或者是否有更好的表达方式。

    这里是完整的代码,如果你卡住了:

    // Pattern is used for both PatternA and PatternB in this outer loop
    // Outer Loop
    for (int Pattern = 0; Pattern <= 9; Pattern++) { 
        // Inner Loop PatternA
        for (int PatternAI = 0; PatternAI <= Pattern; PatternAI++) {
            System.out.print("+");
        }
        if (Pattern < 7)
            System.out.print("\t\t");
        else
            System.out.print("\t");
        // Inner Loop PatternB
        for (int PatternBI = 9; PatternBI >= Pattern; PatternBI--) {
            System.out.print("+");
        }
        System.out.println();
    }
    

    【讨论】:

      【解决方案2】:

      外循环穿过图案的线条,内循环穿过这些线条的元素。要将多行合二为一,您必须将多个内循环合并到一个外循环中。

      Try it online!

      例如,采取这些模式:

      一个外循环中有多个内循环:

      int n = 5;
      for (int i = -n; i <= n; i++) {
          System.out.print(i == -n ? "a) " : "   ");
          for (int j = -n; j <= n; j++) {
              if (i + j <= 0)
                  System.out.print("*");
              else
                  System.out.print("-");
          }
          System.out.print(i == -n ? "  b) " : "     ");
          for (int j = -n; j <= n; j++) {
              if (i + j >= 0)
                  System.out.print("*");
              else
                  System.out.print("-");
          }
          System.out.print(i == -n ? "  c) " : "     ");
          for (int j = -n; j <= n; j++) {
              if (i <= j)
                  System.out.print("*");
              else
                  System.out.print("-");
          }
          System.out.print(i == -n ? "  d) " : "     ");
          for (int j = -n; j <= n; j++) {
              if (Math.abs(i) + Math.abs(j) <= n)
                  System.out.print("*");
              else
                  System.out.print("-");
          }
          System.out.println();
      }
      

      输出:

      a) ***********  b) ----------*  c) ***********  d) -----*-----
         **********-     ---------**     -**********     ----***----
         *********--     --------***     --*********     ---*****---
         ********---     -------****     ---********     --*******--
         *******----     ------*****     ----*******     -*********-
         ******-----     -----******     -----******     ***********
         *****------     ----*******     ------*****     -*********-
         ****-------     ---********     -------****     --*******--
         ***--------     --*********     --------***     ---*****---
         **---------     -**********     ---------**     ----***----
         *----------     ***********     ----------*     -----*-----
      

      另见:How to print ASCII patterns in C# but using Java syntax?

      【讨论】:

        猜你喜欢
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        相关资源
        最近更新 更多