2017-12-07 5 views
1

Ich versuche, ein Dreieck mit verschachtelten Schleifen zu bauen.Gebäudedreieck mit verschachtelten Schleifen

var line, triangle; 
 
line = triangle = ""; 
 

 
for (var row = 1; row <= 7; row++) { 
 
    for (var x = 0; x < row; x++) { 
 
    line += "#"; 
 
    } 
 
    triangle += line + "\n"; 
 
} 
 

 
console.log(triangle);

erwartete ich, dass jede Zeile mehr als das letzte ist nur von einem "#" wie folgt aus:
enter image description here

Aber dies ist das Ergebnis, das ich bekam:
enter image description here

+1

Sie wollen wahrscheinlich mit einer leeren Zeile beginnen. – SLaks

+1

Sie sollten dafür nicht zwei Schleifen benötigen. Behalten Sie zwei Variablen, eine für das Ergebnis und eine andere für die aktuelle Zeile. Hängen Sie die aktuelle Zeile an das Ergebnis jeder Schleife –

+0

@ will.fiset Ich werde das versuchen –

Antwort

2

Der Grund Ihr Code ist es, Sie aktualisieren line bei jeder Iteration und Sie hängen daran an. Wenn Sie die verschachtelten Schleifen ausführen möchten, müssen Sie die variable Linie jedes Mal zurücksetzen, wenn Sie sich in der äußeren Schleife befinden.

var line, triangle; 
 
line = triangle = ""; 
 

 
for (var row = 1; row <= 7; row++) { 
 
    line ="" 
 
    for (var x = 0; x < row; x++) { 
 
    line += "#"; 
 
    } 
 
    triangle += line + "\n"; 
 
} 
 

 
console.log(triangle);

Oder können Sie halten, was Sie haben und werfen die innere Schleife und jede Iteration Sie nur ein Zeichen der Zeile hinzufügen.

var line, triangle; 
 
line = triangle = ""; 
 

 
for (var row = 1; row <= 7; row++) { 
 
    line += "#"; 
 
    triangle += line + "\n"; 
 
} 
 

 
console.log(triangle);

+0

Dies ist viel sauberer. Danke –

+0

Das zweite Schnipsel ist besonders sauber. Ich mag es, in zeitlicher Komplexität optimiert zu sein – ionizer

2

Yo Sie müssen Ihre Zeile vor jeder verschachtelten Iteration leeren. Ohne dies haben Sie eine Zeile und jedes Mal verketten Sie neue Elemente. Sie können auch die line Variable verlassen und einfach die triangle verwenden.

var triangle = ''; 
 

 
for (var row = 1; row <= 7; row++) { 
 
    for (var x = 0; x < row; x++) { 
 
    triangle += "#"; 
 
    } 
 
    triangle += "\n"; 
 
} 
 

 
console.log(triangle);

können Sie auch versuchen, diese Lösung mit String#repeat

var triangle = ''; 
 

 
for (var row = 1; row <= 7; row++) { 
 
    triangle += '#'.repeat(row) + '\n'; 
 
} 
 

 
console.log(triangle);

+0

Interessant! Ich werde über String # wiederholen –

0

Try Code unten:

function generatePyramid() { 
    var totalNumberofRows = 7; 
    var output=""; 
    for (var i = 1; i <= totalNumberofRows; i++) { 
     for (var j = 1; j <= i; j++) { 
      output+= "# "; 
     } 
     print(output); 
     output=""; 
    } 
} 
generatePyramid(); 

Wie es funktioniert: http://rextester.com/ULY85622

1

EDIT: es wurde behoben, indem nur eine Zeile hinzufügen - Sie müssen die Variable "Linie" neu initialisiert werden nach jeder Zeile Iteration

var line, triangle; 
 
line = triangle = ""; 
 

 
for (var row = 1; row <= 7; row++) { 
 
    line=""; 
 
    for (var x = 0; x < row; x++) { 
 
    line += "#"; 
 
    } 
 
    triangle += line + "\n"; 
 
} 
 

 
console.log(triangle);

+0

Ich habe es getan, aber das ist lesbarer Weg, danke –

Verwandte Themen