如何通过调用方法在Java中打印圣诞树?

时间:2019-01-04 04:52:43

标签: java

我需要解决以下问题。 该程序具有三个输出:一个三角形和两棵圣诞树。我已经成功地打印了三角形,但是我不知道如何使我的树工作。这是练习40的链接:https://materiaalit.github.io/2013-oo-programming/part1/week-2/

请注意,这不是我的工作。我正在家里学习如何自己编写代码。

代码如下:

public static void xmasTree(int height) {

    for (int i = 1; i <= height; i++ ) {
        printWhitespaces(height - 1);
        printStars( i ); 

    }
 for( int j = 2; j <= height; j++ ){
            printWhitespaces ( height - j );
            printStars ( j - 1 ); 
        }

}

这必须是最终输出:

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

但是我明白了:

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

3 个答案:

答案 0 :(得分:6)

首先,习惯于使用0作为循环中的第一个值,而不是1。这需要一些时间来适应,但是5或6年后它会很自然:-)

您那里肯定有一个逻辑问题。树顶部的每一行应从height - i -1(而不是height - 1)开始,并包含i * 2 + 1个星号(而不是i)。

后备箱有类似的问题,但我会把它留给您作为练习(因为这很重要!)。

答案 1 :(得分:3)

写下您需要做的事情。

每行包括缩进空间和树状星空,因此请写下您需要的空间。

由于您将使用循环,例如从0height - 1计数,也记下迭代器值

                      height = 10
         *            9 spaces,  1 stars, i = 0
        ***           8 spaces,  3 stars, i = 1
       *****          7 spaces,  5 stars, i = 2
      *******         6 spaces,  7 stars, i = 3
     *********        5 spaces,  9 stars, i = 4
    ***********       4 spaces, 11 stars, i = 5
   *************      3 spaces, 13 stars, i = 6
  ***************     2 spaces, 15 stars, i = 7
 *****************    1 spaces, 17 stars, i = 8
*******************   0 spaces, 19 stars, i = 9
        ***           8 spaces,  3 stars
        ***           8 spaces,  3 stars

现在看看是否可以辨别出图案:

spaces = height - 1 - i
stars = 2 * i + 1

对于树干,您循环2次,使用height - 2个空格和3个星,除非树干当然需要以某种树高调整大小,但是您没有请为此指定任何规则。

答案 2 :(得分:0)

public static void xmasTree(int height) {

    // cone
    for (int i = 1; i <= height; i++ ) {
        printWhitespaces(height - i);
        printStars( i );
        printStars( i-1 );
        System.out.println();
    }

    // trunk
    for(int i=1 ; i<=4; i++){
        printWhitespaces(height - height/4 -1);
        printStars(height/2);
        System.out.println();
    }

}

说明:

用于打印锥体:

____h-1__*__h-1____ // h-i。在这里,星数= 2i-1。位于位置i的星星变为中点

___h-1__***___h-1__

__h-2__*****__h-2__

以此类推

对于后备箱(假设宽度有所变化):

__h/4__*****__h/4__ //躯干宽度= h / 2

__h/4__*****__h/4__

以此类推。

但是如其他答案所述,最好以0循环开始:

public static void xmasTree(int height) {

    // cone
    for (int i = 0; i < height; i++ ) {
        printWhitespaces(height - i - 1);
        printStars( i+1 );
        printStars( i );
        System.out.println();
    }

    // trunk
    for(int i = 0 ; i<4; i++){
        printWhitespaces(height - height/4 -1);
        printStars(height/2);
        System.out.println();
    }

}