如何在java中打印n的圣诞树

时间:2017-05-20 23:24:11

标签: java tree

public class tree {

 public static void main(String[] args) {
    int n ;
    Scanner input = new Scanner(System.in);
    System.out.println("Input value n:");
    n = input.nextInt();
    for (int i = 0; i < n; i=i+2) {
        for (int j = n/2; j==0; j--)
            System.out.print(" ");
        for (int k = 0; k <=i ; k++) 
            System.out.print("#");
             System.out.println();
    }
}

这是任务中的要求:

我需要修理什么? 以及如何在从主程序调用的函数中执行打印?

2 个答案:

答案 0 :(得分:0)

这是一些代码。从这个

获取一些想法
public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    //Enter how much line do you need in your tree
    System.out.print("Input value n:");

    int n = s.nextInt();

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

答案 1 :(得分:0)

请注意,您的代码会打印*个字符,但应该打印#个字符,并且#字符之间应该有单个空格。

 Wrong            Correct
   *                 #
  ***              # # #
 *****           # # # # #
*******        # # # # # # #

所以,为了它的乐趣,这是一种非传统的方式来为任何大小的树做正确的方法:

private static void printChristmasTree(int n) {
    final int w = n * 2 - 1;
    char[] buf = new char[w * 3 - 2];
    Arrays.fill(buf, ' ');
    for (int i = w - 1; i < buf.length; i += 2)
        buf[i] = '#';
    for (int s = 0; s < w; s += 2)
        System.out.println(new String(buf, s, s + w));
}

printChristmasTree(6)的输出:

          #
        # # #
      # # # # #
    # # # # # # #
  # # # # # # # # #
# # # # # # # # # # #

无论如何,回到你的代码。您n = 6的输出是:

*
***
*****

您的外部for循环使用i=i+2 1 ,这意味着您只需要获得所需行数的一半。可以更改为i++,也可以将条件更改为i < n * 2。让我们选择第二种选择,即使你打算在星星之间打印空间也是有意义的 1)更好地写为i += 2

将输出更改为:

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

现在行数正确,每行的星数正确。让我们来看看你的空间缩进循环。

j = n/2 = 3以来,条件j==0立即为假,这就是您没有获得任何空格的原因。

也许您的意思是j != 0,但问题是循环不使用i值,因此总是会打印3个空格。我们可以通过使用j = n - i / 2 - 1开始循环来解决这个问题。

固定代码:

private static void printChristmasTree(int n) {
    for (int i = 0; i < n * 2; i += 2) {
        for (int j = n - i / 2 - 1; j > 0; j--)
            System.out.print(" ");
        for (int k = 0; k <= i; k++) 
            System.out.print("*");
        System.out.println();
    }
}

输出:

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

如果我们之前选择了第一个选项,即更改为i++,代码将会(稍有其他一些变化):

private static void printChristmasTree(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = n - 1; j > i; j--)
            System.out.print(' ');
        for (int j = i * 2; j >= 0; j--) 
            System.out.print('*');
        System.out.println();
    }
}