绘制带有制表符和星号的Java圣诞树

时间:2016-05-01 09:04:37

标签: java tree

我需要绘制一个给定n行数的java圣诞树,但不是这样绘制的方式如下:

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

但是像这样,使用分隔标签:

             *
         *      *
    *        *      *
*        *       *      *

到目前为止我的代码是:

 public static void main(String[] args) {
        int i =5;                           
        for(;i!=0;i--) {
            for(int j=0; j!=i; j++);        
                System.out.print("\t\t*");

我终于自己写了代码:

int x = 5;
        for(int i=1; i<=x; i++)
        {
            for (int k=0; k<x-i; k++)
            {
                System.out.print("\t");
            }
            for (int j=0; j<i; j++)
            {

              System.out.print( "\t*\t" );
            }
                System.out.println("");
        }

    }

}

2 个答案:

答案 0 :(得分:2)

这会排成行中的星星

public static void main(String[] args)
{

    int n = 6;
    int i = 0;
    int pad = 7;
    while (i < n) 
    {

        String star = new String(new char[1 + i *2]).replace("\0", "*\t");
        String space = new String(new char[1 + pad]).replace("\0", "\t");
        System.out.printf(space + star + "\n");
        ++i;
        --pad;
    }

}

<强> 修改 根据您的演示

交替显示它们
public static void main(String[] args)
{
    final int it = 5;
    int pad = it;
    int i = 0;
    String space;
    while (i < it) {
        String star = new String(new char[i + 1]).replace("\0", "*\t\t");

        space = new String(new char[pad]).replace("\0", "\t");

        System.out.printf(space + star + "\n");
        ++i;

        --pad;

    }

}

完成for循环

public static void main(String[] args)
{
    //final int it = 5;
    int size;
    size = 5;

    for( int i = 1;  i < size; ++i)
    {
        String star = "";
        for (int p = size; p > i; --p)
        {
            star += "\t";
        }
        for (int j = 0; j < i; ++j)
        {
            star += "*\t\t";
        }

        System.out.println(star);


    }

}

仅使用2个循环的另一个解决方案

public static void main(String[] args)
{
    //final int it = 5;
    int size;
    size = 5;
    List<String> pad = new ArrayList<String>();
    pad.addAll(Arrays.asList("\t","\t","\t","\t","\t"));
    for( int i = 1;  i < size; ++i)
    {
        String star = "";
        //Pattern p = Pattern.compile("([)|(,)|(])");
        star += pad.toString().replaceAll("\\[|\\]|,", "");
        for (int j = 0; j < i; ++j)
        {
            star += "*\t\t";
        }
        pad.remove(pad.size()-1);
        System.out.println(star);

    }

}

答案 1 :(得分:1)

如果您考虑根据行数绘制圣诞树,您可能会在Java程序之后:

int rows = 5;
int i = ((rows-1)*2) + 1;
String pattern = "";
for(int j = 0; j <= (i/2); j++) {
    String spaces = "";
    for (int k = 0; k < ((i/2)-j); k++) {
        spaces += " ";
    }
    pattern += spaces;
    for (int k = 0; k < (i-(((i/2)-j)*2)); k++) {
        pattern += "*";
    }
    pattern += spaces+"\n";
}
System.out.println(pattern);

您可以在其中调整变量行以调整圣诞树的高度。 我使用空格缩进树,tab可以使用宽度相对调整。 当然最好的方法是使用printf,但这可能是创建你在第一个区块中显示的圣诞树最直接的方式。