2017-07-26 64 views
0

我對編程非常陌生,所以這可能是一個簡單的解決方案,我根本不知道。我一直在試着編寫一個代碼,它需要一個特定的數字,例如「10」,並返回一個金字塔,其中基數的星號數量與您輸入的值相匹配。我們應該在我們的代碼中使用此:JavaScript三角代碼?

function makeLine(length) { 
    var line = ""; 
    for (var j = 1; j <= length; j++) { 
    line += "* " 
    } 
    return line + "\n"; 
} 

例如:

image of triangle where the base is matched by the number entered by the programmer

到目前爲止我的代碼看起來是這樣的。我知道這是完全錯誤的,因爲我根本沒有得到所需的結果。我究竟做錯了什麼??

function makeLine(length) { 
    var line = ""; 
    for (var j = 1; j <= length; j++) { 
     line += "* "; 
    } 
    return line + "\n"; 
    function makeTriangle(length) { 
     var line = ""; 
     for (var j = 1; j <= length; j--) { 
      line += "* "; 
     } 
    } 
} 
console.log(makeTriangle(8)); 
+2

我認爲,你應該使用那是方法makeLine給你,這意味着你添加到你的程序的任何東西都不應該修改它。看來你給它增加了一些代碼,這可能不是預期的。嘗試使用它的功能,一個「功能」或一個工具,它可以被調用來從程序的其他部分服務於它的目的。這個函數有一個唯一的責任,就是返回一個代表行的字符串,試着想一下通常的算法,這個算法可以非侵入性地使用這個責任來達到最終目的。 – Sebas

+0

想想你會經歷這些步驟。一般的經驗法則是:如果您可以在紙上做出來,那麼您可以將用於在紙上處理它的步驟轉換爲自動執行的代碼。 –

回答

0

您需要兩個for循環:一個用於跟蹤長度,另一個用於跟蹤當前所在的行。

function makeLine(length) { 
    var line = ""; 
    for (var i = 1; i <= length; i++) { 
    for (var j = 1; j <= i; j++) { 
     line += "* " 
    } 
    line += "\n"; 
    } 
    return line 
} 
0

如果您在es2015上的示例實現。

function makeLine(length) { 
    return Array(length).fill('*').join(''); 
} 

function makePyramid(height) { 
    const result = []; 
    for (let i = 0; i < height; i + 1) { 
    result.push(`${makeLine(i + 1)}\n`); 
    } 
    return result.join(''); 
} 

//* 
//** 
//*** 
//**** 
console.log(makePyramid(4)); 
0

我有一門課程,我正在這個問題,解決它像這樣:

function makeLine(length) { 
 
    var line = ""; 
 
    for (var j = 1; j <= length; j++) { 
 
     line += "* "; 
 
    } 
 
    return line + "\n"; 
 
} 
 

 
    function buildTriangle(height) { 
 
    var triangle = ""; 
 
    for (var i = 1; i <= height; i++) { 
 
     // call makeline function 
 
     triangle += makeLine(i); 
 
    } 
 
    return triangle; 
 
} 
 

 
    console.log(buildTriangle(10));