簡體   English   中英

如何使用 JavaScript 打印基本的聖誕樹?

[英]How to print basic Christmas Tree with JavaScript?

嘗試制作一個簡單的腳本,用簡單的 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') 

有什么建議我錯了嗎? 謝謝 <3

您的代碼有 2 個小問題。

  1. 每個級別應該有奇數顆星星(1、3、5、7、...),並且您添加了 3n + 1 顆星星,它們將在偶數和奇數之間交替。 為此所做的更改是star = star + "**"而不是... + "***"
  2. 不需要 for 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 ie 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?'));

想先計算寬度,然后使用該寬度。 空格取決於寬度和每個高度中*數量。

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--;
    }
} 

 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM