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

こんにちは、私はJavaScriptを使い慣れていて、一般的にはコーディングにかなり新しいです。上記のコードを分析するのに2時間を費やしました。ところで、私は何の助けもなく自分自身を生成しました。私はそれがなぜ、どのように動作するのかわからないので、私は誇りに思っているとは言いません。私は仕事の背後にある基本的な数学を得て、最終的に変数の値をチェックすると、結果が私の計算と一致します。しかし、私は正確に何が起こるか知りません。 '#'を使用して三角形を生成します。私は、ループが何をしているのかを正確に見るためにForループを削除しようとしましたが、私はそれを止めません。見てください。JavaScript:forループ内のwhileループ

最初は、最初のForループでwhileループに入ると、hash.lengthの値は0になります。これを1にカウントすると比較すると、一致しないのでnextlineになります。 "#"と "\ n"を加えた後、hash.lengthは2になります。しかし、コードは最後まで読み込まれ、var countが4になり、var nも4になります。

今、次のループはwhileループ内では発生しません。これを自分で試してみました。 Forループに戻ります。 "hash.length!= count"の条件を調べると、hash.lengthが2でcountが4になっているので、この条件はまだ成り立ちます。これらは等しくないので、Whileループを再度実行する前にwhileを繰り返すべきではありません?

+0

これは有効なjavascriptのようには見えません。最低限、forの左括弧は匹敵しません。これは実行しないでください。 – Carcigenicate

+0

@Carcigenicate:これは有効です。それが実行されます。それはちょうどひどくフォーマットされています。 – Amadan

+0

@Amadanおっと!モバイルアプリでは、forループの右端がスクロールされるまで切られます。 – Carcigenicate

答えて

2
while (cond) 
    statement1; 
    statement2; 

あなたの考えは(そしてインデントはあなたに嘘をついています)行いません。論理フローに合ったコードに改変すると、次のようになります。

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

Whileは次の文だけを繰り返します。さらに繰り返す必要がある場合は、中括弧を使用して複合ステートメント(ステートメントブロック)を使用する必要があります。

ここで、forループは各行に対して1回進みます。その中で、whileは、各ハッシュ文字に対して1回進むでしょう。

+0

@Amadan ...あなたのコメントに感謝します。どうもありがとうございました。 – TaiwoOlabowale

0

括弧のついていないループ{ <-code here-> }は、次の行をループします。

だから、あなたの中にはこれだけやっている:ループのためのあなたの除去、そう

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

を(カウントは1から始まり、hash.lengthが0であるため)、あなたはハッシュ=「#」を持つことになりますと、次のようになります。

基本的にハッシュは改行で#になります。

+0

@GBarroso ...ありがとう。今はすべて意味があります。 – TaiwoOlabowale

0

whileループにループ内のコードを示す括弧がないため、質問への回答は です。 だけ一行は、
hash += "#";
は実行取得し、あなたは、カウントの値を変更する行を取得する場合:あなたはすでにそのループを抜けるので、
count += n;
は、whileループは文句を言わないを繰り返します。
通常、コードはできるだけシンプルにしたいと考えています。あなたは、単にそれをこのように書き込むことにより、投稿のコードと同じ結果を得ることができ :

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

あなたははるかに少ない変数を使用しますが、ハッシュの長さが大幅に削減されます。 文字列連結が多すぎるとコード実行が遅くなることがあります。速く

上記のコードは、forループ7回、たびに実行されないものを、それはハッシュ文字列に「#」を追加し、コンソールに表示...
同じ結果、少数のライン、実行しやすくなり、読みやすくなります。

プログラミングに慣れていない場合は、プログラミングの奨励を奨励するプログラミング言語を使い始めることをお勧めします。

PASCALは、任意のCスタイルの言語の前に最初にそれを学んで、最も可能性の高い、非常に良いコードを書くにあなたを取得し、実行しているだろう、もはや非常に人気ではありません。

私はパスカルの嫌悪者はおそらく批判するだろうと知っています。しかし、この言語はアルゴリズムと良いプログラミングスタイルに集中することをお勧めします。どの言語にもジャンプする前の最初のステップであるはずです。

+0

...ありがとう!あなたのコメントは非常に参考になった、私は多くを学んだ。 – TaiwoOlabowale