2016-03-31 20 views
0
var hash = ""; 
var count = 1; 
var n = 3; 
    for (var pound = 1; pound <=7; pound ++) 
     {while (hash.length != count) 
      hash += "#"; 
      hash += "\n"; 
      count += n; 
      n ++;} 
     console.log(hash); 

Hallo, ich bin neu in Javascript und relativ neu zu Codierung im Allgemeinen. Ich habe ein paar Stunden damit verbracht, meinen obigen Code zu analysieren. BTW, ich habe mich selbst ohne Hilfe generiert. Ich würde nicht sagen, dass ich stolz bin, weil ich nicht weiß warum oder wie es funktioniert. Ich denke, ich bekomme die grundlegende Mathematik hinter der Arbeit und wenn ich die Werte der Variablen am Ende überprüfe, stimmen die Ergebnisse mit meiner Berechnung überein. Aber ich weiß nicht genau was passiert. Es erzeugt ein Dreieck mit '#'. Ich habe versucht, die For-Schleife zu entfernen, um genau zu sehen, was die While-Schleife macht, aber ich kann es nicht verstehen. Bitte schau es dir an.JavaScript: While-Schleife innerhalb einer for-Schleife

Zuerst ist der Wert von hash.length in der ersten For-Schleife und in der while-Schleife gleich 0. Vergleichen Sie, um die Zahl 1 zu zählen, sie passen nicht zusammen und sind daher nextline. Nach dem Hinzufügen von "#" und "\ n" wird hash.length zu 2. Aber der Code wird bis zum Ende gelesen, wodurch var jetzt 4 und var n auch gleich 4 ist.

Nun passiert die nächste Schleife nicht innerhalb der While-Schleife und ich habe es selbst ausprobiert. Es geht zurück auf die For-Schleife. Überprüfen Sie die Bedingung von "hash.length! = Count", diese Bedingung gilt immer noch als hash.length ist 2 und count ist jetzt 4. Da sie nicht gleich sind, sollte nicht die while wiederholen, bevor Sie wieder in die For-Schleife gehen ?

+0

Dies sieht nicht wie gültiges Javascript aus. Zumindest ist die linke Klammer für "for" nicht angepasst. Dies sollte nicht ausgeführt werden. – Carcigenicate

+0

@Carcigenicate: Es ist gültig. Es wird ausgeführt. Es ist einfach schrecklich falsch formatiert. – Amadan

+0

@Amadan Whoops! In der mobilen App wird das rechte Ende der for-Schleife abgeschnitten, bis Sie blättern. – Carcigenicate

Antwort

2

nicht tun, was Sie denken (und die Einrückung liegt an Ihnen). den Code Umformatierung auf den logischen Ablauf um wahr zu sein gibt Ihnen diese:

var hash = ""; 
var count = 1; 
var n = 3; 
for (var pound = 1; pound <= 7; pound++) { 
    while (hash.length != count) 
    hash += "#"; 
    hash += "\n"; 
    count += n; 
    n++; 
} 
console.log(hash); 

Während wiederholt nur die sehr nächste Anweisung. Wenn Sie mehr wiederholen müssen, müssen Sie eine zusammengesetzte Anweisung (Anweisungsblock) mit den geschweiften Klammern verwenden.

Hier wird for Schleife für jede Zeile einmal gehen; Innerhalb davon wird while einmal für jedes Hash-Zeichen gehen.

+0

@Amadan ... Ich freue mich über Ihren Kommentar. Vielen Dank. – TaiwoOlabowale

0

Jede Schleife ohne Klammern { <-code here-> } nur Schleifen sieht die folgende Zeile.

Also Ihr während tut nur dies:

while (hash.length != count) 
    hash += "#"; 

Also, Ihre for-Schleife zu entfernen, werden Sie hash = "#" haben (weil Zahl bei 1 beginnt, und hash.length ist 0) und dann passiert folgendes:

hash += "\n"; 
count += n; 
n++; 

Grundsätzlich ist Hash # mit einem Zeilenumbruch.

+0

@GBarroso ... Vielen Dank. Es macht jetzt alles Sinn. – TaiwoOlabowale

0

Die Antwort auf Ihre Frage ist, dass seit der While-Schleife keine Klammern hat, um den Code innerhalb der Schleife anzuzeigen. nur eine Zeile, die
hash += "#";
wird ausführen, und wenn Sie auf die Linie erhalten, die den Wert der Zählung ändert:
count += n;,
die while-Schleife wird nicht wiederholen, da Sie bereits, dass die Schleife verlassen.
Normalerweise möchten Sie den Code so einfach wie möglich halten. Sie können das gleiche Ergebnis wie der Code, den Sie einfach geschrieben es auf diese Weise zu schreiben:

var hash=""; 
    for (var pound = 1; pound <=7; pound ++) 
     { 
      hash += "#"; 
      console.log(hash);    
     } 

werden Sie weit weniger Variablen verwenden, wird die Länge des Hash erheblich reduzieren werden. manchmal zu viele String-Verkettung verlangsamt die Codeausführung.

, was der Code über eine for-Schleife sieben Mal läuft, jedes Mal, es hängt eine ‚#‘ an den Hash-String und zeigt sie auf der Konsole ...
gleiches Ergebnis, weniger Linien, schneller Ausführung und viel einfacher zu lesen.

Wenn Sie neu in der Programmierung sind, würde ich empfehlen, mit einer Programmiersprache zu beginnen, die gute Programmierpraxis fördert.

obwohl PASCAL ist nicht mehr sehr beliebt, es zuerst vor jeder C-Stil Sprache zu lernen, würde höchstwahrscheinlich erhalten Sie und läuft sehr guten Code zu schreiben.

Ich weiß Pascal Haters wird wahrscheinlich kritisieren .. aber, diese Sprache ist gut, um Sie auf Algorithmen und guten Programmierungsstil zu konzentrieren. Das sollte dein erster Schritt sein, bevor du in irgendeine Sprache sprichst.

+0

... Vielen Dank! Dein Kommentar war sehr hilfreich, ich habe viel gelernt. – TaiwoOlabowale

Verwandte Themen