尝试创建一个简单的脚本,该脚本在控制台中使用简单的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')
我错了什么建议吗? thx <3
答案 0 :(得分:1)
您的代码有2个小问题。
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?'));
答案 1 :(得分:0)
想先计算宽度,然后再使用该宽度。空格取决于每个高度中*
的宽度和数量。
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--;
}
}