【问题标题】:Incorrect display of the Christmas tree圣诞树显示不正确
【发布时间】:2021-12-22 12:42:20
【问题描述】:

问题是星星不会形成圣诞树,它们只是形成一个直角三角形。 如何解决? https://i.imgur.com/vKpxRhP.png https://i.imgur.com/eyuccNn.png

public static void main(String[] args) throws FileNotFoundException {
    File file = new File("In0103.txt");
    Scanner in = new Scanner(file);
    int maxWidth = in.nextInt();
    int initialWidth = 1;
    int initialLevel = 1;
    int maxLevel = (maxWidth + 1) / 2;
    int freeSpace = maxLevel - 1;

    printChristmasTree(initialWidth, initialLevel, maxLevel, freeSpace, null);
}

static void printChristmasTree(int width, int level, int maxLevel, int freeSpace, PrintWriter save) throws FileNotFoundException {
    if (save == null) {
        save = new PrintWriter("Out0103.txt");
    }
    if (level < maxLevel) {
        save.println(Stream.generate(() -> " ").limit(freeSpace).collect(Collectors.joining()));
        save.println(Stream.generate(() -> "*").limit(width).collect(Collectors.joining()));
        save.println();
        printChristmasTree(width = width + 2, ++level, maxLevel, --freeSpace, save);
    } else {
        save.println(Stream.generate(() -> " ").limit(freeSpace).collect(Collectors.joining()));
        save.println(Stream.generate(() -> "*").limit(width).collect(Collectors.joining()));
        save.close();
    }

}

【问题讨论】:

  • 赞成圣诞树出现在标题中

标签: java recursion


【解决方案1】:

你几乎明白了。但是您正在使用save.println() 打印freeSpace,但您不需要换行,只需save.print()。此外,还有一个额外的save.println() 也不需要:

public static void main(String[] args) throws FileNotFoundException {
    File file = new File("In0103.txt");
    Scanner in = new Scanner(file);
    int maxWidth = in.nextInt();
    int initialWidth = 1;
    int initialLevel = 1;
    int maxLevel = (maxWidth + 1) / 2;
    int freeSpace = maxLevel - 1;

    printChristmasTree(maxWidth, initialWidth, initialLevel, maxLevel, freeSpace, null);
}

static void printChristmasTree(int maxWidth, int width, int level, int maxLevel, int freeSpace, PrintWriter save) throws FileNotFoundException {
    if (save == null) {
        save = new PrintWriter("Out0103.txt");
        save.println("n =" + maxWidth + "");
    }

    if (level < maxLevel) {
        save.print(Stream.generate(() -> " ").limit(freeSpace).collect(Collectors.joining()));
        save.println(Stream.generate(() -> "*").limit(width).collect(Collectors.joining()));
        printChristmasTree(maxWidth, width + 2, ++level, maxLevel, --freeSpace, save);
    } else {
        save.print(Stream.generate(() -> " ").limit(freeSpace).collect(Collectors.joining()));
        save.println(Stream.generate(() -> "*").limit(width).collect(Collectors.joining()));
        save.close();
    }
}

也许您需要将行从 int freeSpace = maxLevel - 1; 更改为 int freeSpace = maxLevel;,因为您的树的最后一行似乎有一个空闲空间。

【讨论】:

  • 非常感谢
  • 不客气。考虑对答案进行投票并接受它作为答案,这样您的问题就可以“关闭”,其他人可以从中受益,并轻松理解这可能是类似问题的可能解决方案;)谢谢!
  • 我标记了答案。但不幸的是,我不能给你一个赞成票
  • 没关系!谢谢!
  • 我还有一个问题。我希望在圣诞树上方显示信息,* 是基数。例如:n = 7。这种情况下如何输入呢?不幸的是,它不能那样工作.. save.println ("n =" + maxWidth + "");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 2015-08-23
相关资源
最近更新 更多