如何使用 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行,每行三个*