如何使用 JavaScript 打印基本的圣诞树?

Posted

技术标签:

【中文标题】如何使用 JavaScript 打印基本的圣诞树?【英文标题】:How to print basic Christmas Tree with JavaScript? 【发布时间】:2018-10-10 16:17:52 【问题描述】:

尝试制作一个简单的脚本,用简单的 JS 循环在控制台中绘制一定高度的树。应该是这样的。

对于高度 = 4:

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

到目前为止有这个,但不知何故它不起作用:

function drawTree(height) 
    for ( var i = 0; i < height ; i++ ) 
        var star = '*';
        var space = ' ';

        for ( var j = 1; j <= i; j++ ) 
            star = star + '***';            
        

        for ( var k = height - 1 ; k > 0; k-- )             
            spacesBefore = space.repeat(k);
            star = spacesBefore + star;
        
        console.log(star);
    


var levels = prompt('How many levels high should be the tree?');

drawTree(levels);
alert('Check console') 

我错的地方有什么建议吗?谢谢

【问题讨论】:

你好。 “它不起作用”不是一个问题。请更具体一点,并包括您自己的一些分析或调试尝试。 以后,你应该在尝试编写程序之前弄清楚数学。它使事情变得容易得多。 【参考方案1】:

您的代码有 2 个小问题。

    每个级别应该有奇数颗星(1、3、5、7,...),并且您添加了 3n + 1 颗星,它们将在奇数和偶数之间交替。为此所做的更改是 star = star + "**" 而不是 ... + "***" 不需要for (var k = ...) 循环来计算空格。您的逻辑是正确的,但是在每行的整个高度上循环会产生相同数量的每行空格,这就是您的输出所显示的,这是错误的。你想要为空格数做的是height - i - 1

一个可行的解决方案如下所示:

function drawTree(height) 
    for ( var i = 0; i < height ; i++ ) 
        var star = '*';
        var space = ' ';

        for ( var j = 1; j <= i; j++ ) 
            star = star + '**';            
        
           
        var spacesBefore = space.repeat(height-i-1);
        star = spacesBefore + star;
        console.log(star);
    


var levels = prompt('How many levels high should be the tree?');

drawTree(levels);

此代码的更简洁版本如下所示:

function drawTree(height) 
  for (var i = 0; i < height; i++) 
    // 2n+1 stars per row i.e. 1, 3, 5, 7, ...
    var stars = '*'.repeat(2 * i + 1);
    var spacesBefore = ' '.repeat(height - i - 1);
    console.log(spacesBefore + stars);
  


drawTree(prompt('How many levels high should be the tree?'));

【讨论】:

它确实在工作:) 谢谢!我太固执了,我需要第二个循环,而这更干净 @Cienszki 如果您有兴趣,我添加了一个更简洁的版本。内部的for (var j ...) 循环也是不必要的,你可以像处理空格一样使用.repeat()【参考方案2】:

想先计算宽度,然后使用该宽度。空格取决于每个高度中* 的宽度和数量。

width = height*2 - 1;

树代码:

function tree(h) 

    let i =0, j = 1;

    w = h*2 - 1;

    let space = parseInt(w / 2);

    while (space >= 0) 
        let str = '';

        for (i = 0; i < space; i++) str += ' ';

        for (i = 0; i<j; i++) str += '*';

        console.log(str);

        // Since every next line got 2 more *
        j += 2;
        // Number of space reduce by 1
        space--;
    
 

【讨论】:

【参考方案3】:

function drawTree(h) 
    let star = "*";
    let space = " ";
    let spaceCount = h-1;
    let starCount = 1;
    
    for(let i = 0; i < h; i++) 
        console.log(`$space.repeat(spaceCount)$star.repeat(starCount)$space.repeat(spaceCount)`);
        spaceCount -= 1;
        starCount += 2;
    


drawTree(20)

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何使用 JavaScript 打印基本的圣诞树?的主要内容,如果未能解决你的问题,请参考以下文章

Python用*打印圣诞树图案要求树冠三角形部分为n=5行,中间树干部分为4行,每行三个*

小代码 圣诞节树的打印

HTML+CSS+JavaScript 制作抖音超火圣诞树

用 Python 画圣诞树的 N 种玩法

圣诞纯情手势告白(Mediapipe基本使用&手势识别详解)

圣诞纯情手势告白(Mediapipe基本使用&手势识别详解)