【问题标题】:Regarding a star pattern关于星形图案
【发布时间】:2014-05-06 01:35:09
【问题描述】:

我正在尝试在星形图案下方打印

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

我正在使用以下逻辑进行打印:

*
***
*****

上半场代码:

int i, j;
for (i = 1; i <= 3; i++) {
    for (j = 1; j <= i; j++)
        System.out.print("*");
    for (j = i - 1; j >= 1; j--)
        System.out.print("*");
    System.out.println();
}

但我仍然不确定如何打印整个结构。

【问题讨论】:

  • 具体要求是什么?你必须使用for 循环吗?行数是否必须灵活?否则你可以只使用 *\n***\n 等。
  • 顺便说一句,这样做的聪明方法是使用for (i = -a; i &lt;= +a; ++i) 运行循环。那么要在该行上打印的星数的形式为n - |i|,其中|i| 表示i 的绝对值。 n 可能是a + 1
  • 这是一道作业题,是吗?

标签: java ascii-art


【解决方案1】:

你只需要反向循环,从 upperBound - 1 开始。见下面的代码:

int numberOfLines = 3;
for (int i = 1; i <= numberOfLines; i++) {
    for (int j = 1; j < 2*i; j++){
        System.out.print("*");
    }
    System.out.println();
}
for (int i = numberOfLines - 1; i > 0; i--) {
    for (int j = 1; j < 2*i; j++){
        System.out.print("*");
    }
    System.out.println();
}

【讨论】:

  • 你可以创建一个递归函数,或者你可以使用 StringBuilder 来避免所有的打印,最后只打印。取决于用户想要做什么。有很多方法可以解决这个问题。
【解决方案2】:

采取尽可能简单的步骤也许是有意义的。

首先,你需要五行,所以

for (i = 1; i <= 5; i++) {

接下来,在i 线上,确定要放置的星号数量。第 3 行有 5 个星号,在该行上方或下方每一步减少两个。

    int len = 5 - Math.abs (i - 3) * 2;

然后,只需将它们放在一个循环中:

    for (j = 1; j <= len; j++)
        System.out.print("*");

并包含一个换行符:

    System.out.println();
}

【讨论】:

    【解决方案3】:

    模式由N * 2 - 1rows组成。对于每一行,列按递增顺序排列,直到Nth rowNth row columns 后按降序打印。

    逐步描述逻辑打印半菱形星形图案。

    1. 输入要从用户打印的列数。将其存储在变量中,例如 N

    2. 为每一列声明一个变量作为循环计数器,比如columns = 1

    3. 要遍历行,请从 1 to N * 2 - 1 运行外部循环。循环结构应该类似于for(i=1; i&lt;N*2; i++)

    4. 要遍历列,请运行从 1 到列的内部循环。循环结构应类似于for(j=1; j&lt;=columns; j++)。在这个循环中打印 star

    5. 打印完一行的所有列后,移动到下一行。

    6. 在内部循环检查 if(i &lt;= N) 之后,然后递增 columns,否则递减 1。

      int columns = 1;
      int N = 3;
      for (int i = 1; i < N * 2; i++) {
          for (int j = 1; j <= columns; j++) {
              System.out.print("*");
          }
          if (i < N) {
              /* Increment number of columns per row for upper part */
              columns++;
          } else {
              /* Decrement number of columns per row for lower part */
              columns--;
          }
          /* Move to next line */
          System.out.print("\n");
      }
      

      输出:

      *
      **
      ***
      **
      *
      

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      相关资源
      最近更新 更多