[英]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 個小問題。
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 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.