• ベストアンサー

JavaScriptの解説サイトでわからないところがあったので教えてください1

ただいまJavaScriptの基本中の基本の段階を、 解説サイトを見ながら勉強しています。 その中でわからないことがあったので教えてください。 以下、サイト文の引用 ************************************************ 例えば「0から10までの偶数の和を、変数a求めたい」場合。    a=0;    for(i=0; i<11; i++)      { if(i%2==1)continue;       a+=i; }    alert(a);  と記述します。  まず変数aを0で初期化します。  続いてforループを開始します。 最初に変数iを0で初期化します。  次にループの条件判定を行い、iが11未満ならばループを続行します。  さらにループ内でif文の条件分岐をして、iを2で割った余りが0以外の場合はcontinue命令が実行され、 ループの先頭に戻ります。 もしiを2で割った余りが0の場合は、a+=i;の処理が実行されて変数aに変数iの値が加算されます。 ************************************************ 上のif文について、解説では 「iを2で割った余りが0以外の場合はcontinue命令が実行」 「iを2で割った余りが0の場合は、a+=i;の処理が実行されて変数aに変数iの値が加算」 となっていますが、この意味がよくわかりません。 i%2==1 というのは「iを2で割った余りが1と等しい」なのに、 なぜ0以外の場合、0の場合という"0"で判断しているのでしょうか? それと、 「iを2で割った余りが1の場合、 continue処理をして、変数aはa+iの値となる」 ・・・というこちらの勝手な解釈のどこが間違っていますか? 初心者なのでくだらない質問かもしれませんがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • itomizu
  • ベストアンサー率47% (8/17)
回答No.2

確かに、0以外の場合、0の場合というのは厳密に書くとNo.1の方が書かれたようになります。 「iを2で割った余りが1の場合、 continue処理をして、変数aはa+iの値となる」 と書いてありますが、 continue処理はそれ以下の命令を無視して再びループの先頭に戻るので、余りが1の場合はa+=1は実行されません。 余りが1でないときはcontinue処理をしないのでa+=1が実行されます。 「iを2で割った余りが1の場合、 continue処理をして、 iを2で割った余りが1でない場合、 変数aはa+iの値となる」 の方が正しいです。 for文の場合はcontinue処理でiの増減がありますが、 while文ではiの値が変わらないことに注意。

spnk55
質問者

お礼

continue処理というのは、この場合、 条件に当てはまれば、上のfor文の処理を続け、 条件に当てはまらなければ、次のa+=iを実行する ということですね。 よくわかる説明、どうもありがとうございました<(_ _)>

その他の回答 (2)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

>iを2で割った余りが0以外の場合は~ 解説文から、プログラムをすれば以下の3通りになると思います。 1.if(i%2!=0)continue; ※以前、年配の方からプログラムのコーディングでノットイコール(!=)を極力使用しないように聞いた事があります。これは、他の言語等でノットイコールが無いとか複合条件する時にややこしくなるとか聞いた覚えがあります。(確かそんなだったと思います、うろ覚え) 2.if(i%2==0){}else{continue;} ※elseを記述するだけ見辛くなる。 3.if(i%2==1)continue; ※解説文通りではないですけど、シンプルでまとまってます。 3での記述方法にしていると言うことは、年配の方がかかれている解説ではないのでしょうか。いわゆる記述癖っていうことだと思います。 3にするのであれば、解説文を「iを2で割った余りが1の場合は~」が正しくなりますね。

spnk55
質問者

お礼

いろいろ記述方法があるんですね。 この場合、0 か 1 の2者択一なので、 3番目の方法が一番シンプルですが、 もし3つ以上の選択肢がある場合にはややこしくなりそうですね。 1番目2番目の方法は、どう処理するのかがわかりやすいです。 1番目を使いたいところですが、ご教授どおり、なるべく使わないように心がけます。 どうもありがとうございました<(_ _)>

回答No.1

解説文のとおりにすると、 { if(i%2!=0)continue; てことになるのでしょうね。 2 で割った余りは、0 か 1 しかないので 1 = 0以外てことです。

spnk55
質問者

お礼

0 か 1 の2通りしかないという点を うっかり見過ごしていました(汗 どうもありがとうございました<(_ _)>

関連するQ&A