在使用星的Javascript的圣诞树

时间:2018-04-17 10:22:32

标签: javascript

我有这个循环问题,我真的不明白为什么我的代码不起作用,我甚至在纸上画这个,而且我的逻辑它看起来不错但是它的不工作,请帮助我。



function drawTree(h) {
  for(var i=0; i<=h; i++){
    var star = '';
    for(var k=0; k<=1; k++){
      star += "  ";
    };
    for(var j=0; j<=i; j++) {
        star += "*";
    };
  };
    console.log(star);
};

drawTree(5);
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:4)

请参阅代码中的注释以进行更改。

&#13;
&#13;
function drawTree(h) {
  for(var i=0; i<=h; i++){
    var star = '';
    //Changed to start high then decrease
    for(var k = 1; k <= h - i; k++){
      //shortened to one space
      star += " ";
    };
    for(var j=0; j<=i; j++) {
        //Added space so there is an odd number
        //of symbols and the star above fits
        //the space
        star += " *";
    };
    //Moved into the loop
    console.log(star);
  };
};

drawTree(5);
&#13;
&#13;
&#13;

请注意,使用String.prototype.repeat

可以大大缩短代码

&#13;
&#13;
function drawTree(h) {
  for (var i = 0; i <= h; i++){
    console.log(" ".repeat(h - i) + " *".repeat(i + 1));
  };
};

drawTree(5);
&#13;
&#13;
&#13;

另请注意,您的示例会为drawTree(5)的调用产生一个包含六颗星的基线。我不确定这是否有意。上面的代码重现了所述行为,编辑它以显示一条线不应该太难。

答案 1 :(得分:0)

您正在为每一行重新设置它,但只在最后打印它。

console.log(star);移至第一个循环的末尾。

答案 2 :(得分:0)

您必须先将 console.log 语句置于for循环中。这应该是一棵半树。 如果你想要正确的树,那么在星之前预先悬空。 计算行数的中心并在其前面添加空格。

希望这不是作业问题。

function drawTree(h) {
  for(var i=0; i<=h; i++){
    var star = '';
    for(var k=0; k<=1; k++){
      star += "  ";
    };
    for(var j=0; j<=i; j++) {
        star += "*";
    };
    console.log(star);
  };

};

drawTree(5);

答案 3 :(得分:0)

&#13;
&#13;
function drawTree(h){
for (var i = 0; i < h; i++) {
var star = ''; 
var space = (h - i);
if (i == 0){
star += ' '.repeat(space + 1) + '\n';
}
star += ' '.repeat(space + 1);
var zero = 2 * i + 1;
star += '*'.repeat(zero);
console.log(star);
}
}
drawTree(5);
&#13;
&#13;
&#13;