for文の変化式についてなぜiの値が0なのか?

このQ&Aのポイント
  • for文の変化式(i++)で、初期化後の値0から1増えるので、1だと思うのですが、なぜ一行目のiの値が0なのでしょうか。
  • 参考書に書いてなかったので不思議に思いました。
  • ご存知の方、どうか理由を教えてください。
回答を見る
  • ベストアンサー

for文の変化式について

javascriptを勉強中の初心者です。 以下のスクリプトを見てください。 var num = 1; document.write("<p>"); for (var i = 0; i < 10; i++){ num *= 2; document.write("i = " + i + ",num = " + num + "<br />"); if (num >= 100){ break; } } document.write("<br />"); このスクリプトの実行結果は i=0 , num=2 i=1 , num=4 i=2 , num=8 i=3 , num=16 i=4 , num=32 i=5 , num=64 i=6 , num=128 なのですが、なぜ一行目の i の値が 0 なのでしょうか。 forの中の変化式(i++)で、初期化後の値 0 から 1 増えるので、1 だと思うのですが・・・ 1回目の処理では変化しない、等とは 参考書に書いてなかったので不思議に思いました。 ご存知の方、どうか理由を教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

forループの  i++ の部分がそのような処理にさせています。  試しに  ++i と変えてみてください。 あなたの予想通りの結果になるはずです。 インクリメント()とデクリメント()は事情に合わせて変数の前後に置くことで挙動を変えることができます。これは大概の高級言語では実装されています。

lade0225
質問者

お礼

お礼が遅くなり申し訳ありません。 ++i を試して疑問が解けました。 for文の変化式についてだけでなく インクリメントの前置/後置の挙動の違いを理解することができました。 回答いただき、本当にありがとうございました!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

単にこういうことをしているというイメージで良いでしょう。 <script> for (var i = 0; i < 10;){ document.write(i);//実処理 i++; } </script> 結局、変化式であるi++が先に実行されると初期化式でわざわざ初期値を 設定しているのにそれが利用されなくなってロジックがブレるので 伝統的にfor構文は初期値を利用して繰り返し処理をすることになっています。

lade0225
質問者

お礼

お礼が遅くなり申し訳ありません。 回答ありがとうございました!

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

for の 3 番目の項目が実行されるのはあるループを終えて次のループに移るときです。 最初のループの開始時はループとループの間ではないので 3 番目の項目は実行されません。 (処理)の中で continue や break を使っていない場合、 for ((文1); (文2); (文3)) {(処理)} は {  (文1)  while ((文2)) {   (処理)   (文3)  } } と同じ処理になります。

lade0225
質問者

お礼

お礼が遅くなり申し訳ありません。 3盤目の項目が実行されないのは知りませんでした。 回答ありがとうございました!

関連するQ&A

  • for文について

    以下のfor文について質問致します。 <script type="text/javascript"> for(i = 10; i; i--){ document.write(i+"<br>"); } </script> 条件式の部分がi>0ならわかるのですが、ただiと書いただけで 10回繰り返しが起こるのはどうしてでしょうか?

  • 入れ子になったfor文の初期化式について

    javascriptを勉強中の初心者です。 以下のスクリプトを見てください。 document.write("<p>"); outloop: for (var i = 1; i < 5; i++){ for (var j = 1; j < 5; j++){ document.write(i + " × " + j + " = " + (i * j) + "<br />"); if (i * j > 10){ break outloop; } } } document.write("</p>"); 5未満の数同士の乗算の結果を順に表示し 乗算の結果が10を超えたら外のループを抜けるというスクリプトです。 for文がこのように入れ子になっている場合、 内側のループが二週になるとjはまた初期化されて1になるのでしょうか? 手持ちの参考書にあるfor文の説明では『初期化式は初めの一回だけ実行される』とあります。 内側のループが二回目以降の時、参考書のいう『初めの一回』になると考えていいのでしょうか。 初歩的な質問で恐縮ですが、ご存知の方どうか教えてください。 よろしくお願いいたします。

  • javascriptの九九の表の書き換えについて

    var a; for (a=1; a<10; a++) if (a<=1){ document.write("   "+a); }else{ document.write(" "+a);} document.write("<br>"); document.write("---------------------------------"); document.write("<br>"); var i, j; for (i=1; i<10; i++) { document.write(i+"|"+" "); for (j=1; j<10; j++) { var k = i*j; if ( k > 81 ) { break; } if (k>=10){ document.write(" "+k+" "); }else { document.write(" "+k);} } document.write("<br />"); } forを使った九九の表はできたのですが これをwhileを使ったコードに書き換えるにはどうしたらいいでしょうか?

  • お願いしますjavascriptです

    javascript 初心者なのですが、どうしてもわからないため、 ご教授お願いたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>おみくじ</title> </head> <body> <script type="text/javascript"> <!-- //0~4の乱数を作る //0:大吉, 1:中吉, 2:小吉 ,3:吉, 4:凶 var rnd = Math.floor(Math.random() * 5) //おみくじの判定 switch (rnd){ case 0: var fortune = "大吉"; break; case 1: var fortune = "中吉"; break; case 2: var fortune = "小吉"; break; case 3: var fortune = "吉"; break; default: var fortune = "凶"; break; } //おみくじの表示 document.write("今日の運勢: " + fortune + "<br />"); //金運の表示 document.write("金運: "); var money = Math.floor(Math.random() * 5) + 1; for (var i = 0; i < money; i++) { document.write("(ダイヤ)"); } document.write("<br>"); //恋愛運の表示 document.write("恋愛運: "); var love = Math.floor(Math.random() * 5) + 1; for (var i = 0; i < love; i++) { document.write("&hearts;"); } document.write("<br>"); //健康運の表示 document.write("健康運: "); var health = Math.floor(Math.random() * 5) + 1; var i = 0; while (i < health){ document.write("(クラブ)"); i++; } document.write("<br>"); //--> </script> </body> </html> このソースに、分岐だと考えますが、 大吉が出た時は、金運、恋愛運、などのマークが3つ以上に設定、逆に 今日ならば各マークが3つ以下に設定するには Javascriptでどういう風に記述すればよいでしょうか。

  • お願いいたします

    javascript 初心者なのですが、どうしてもわからないため、 ご教授お願いたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>おみくじ</title> </head> <body> <script type="text/javascript"> <!-- //0~4の乱数を作る //0:大吉, 1:中吉, 2:小吉 ,3:吉, 4:凶 var rnd = Math.floor(Math.random() * 5) //おみくじの判定 switch (rnd){ case 0: var fortune = "大吉"; break; case 1: var fortune = "中吉"; break; case 2: var fortune = "小吉"; break; case 3: var fortune = "吉"; break; default: var fortune = "凶"; break; } //おみくじの表示 document.write("今日の運勢: " + fortune + "<br />"); //金運の表示 document.write("金運: "); var money = Math.floor(Math.random() * 5) + 1; for (var i = 0; i < money; i++) { document.write("(ダイヤ)"); } document.write("<br>"); //恋愛運の表示 document.write("恋愛運: "); var love = Math.floor(Math.random() * 5) + 1; for (var i = 0; i < love; i++) { document.write("&hearts;"); } document.write("<br>"); //健康運の表示 document.write("健康運: "); var health = Math.floor(Math.random() * 5) + 1; var i = 0; while (i < health){ document.write("(クラブ)"); i++; } document.write("<br>"); //--> </script> </body> </html> このソースに、分岐だと考えますが、 大吉が出た時は、金運、恋愛運、などのマークが3つ以上に設定、逆に 今日ならば各マークが3つ以下に設定するには Javascriptでどういう風に記述すればよいでしょうか。

  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • JavascriptからJavaへの変え方

    Javascriptで作ったものをJavaにしないといけなくなったのですが 私はJava初心者でまったくわかりません。 色々ネットで調べてみたのですが、どうも難しくて理解することができませんでした。 下にJavascriptで作ったものを載せてるのですがどなたかやり方を教えてもらえないでしょうか? <html> <head> <title>サンプル</title> <script type="text/javascript"> function jikoku() { dd = new Date(); document.F1.T1.value = dd.toLocaleString(); window.setTimeout("jikoku()", 1000); } </script> <script type="text/javascript"> mes = new Array(5); mes[0]="0"; mes[1]="1"; mes[2]="2"; mes[3]="3"; mes[4]="4"; date=(new Date()).getHours(); if( 0 <= date && date <= 5 ){ document.write(mes[0]); } else if( 6 <= date && date <= 10 ){ document.write(mes[1]); } else if( 11 <= date && date <= 16 ){ document.write(mes[2]); } else if( 17 <= date && date <= 19 ){ document.write(mes[3]); } else{ document.write(mes[4]); } </script> <script type="text/javascript"> function Random() { var kazu = Math.random(); kazu = kazu*100; kazu = Math.ceil(kazu); if( kazu<=9 ) document.write('<br/>○1<br/>'); else if( kazu<=19 ) document.write('<br/>○2<br/>'); else if( kazu<=29 ) document.write('<br/>○3<br/>'); else if( kazu<=39 ) document.write('<br/>○4<br/>'); else if( kazu<=49 ) document.write('<br/>○5<br/>'); else if( kazu<=59 ) document.write('<br/>○6<br/>'); else if( kazu<=69 ) document.write('<br/>○7<br/>'); else if( kazu<=79 ) document.write('<br/>○8<br/>'); else if( kazu<=89 ) document.write('<br/>○9<br/>'); else document.write('<br/>○10<br/>'); } Random() </script> <script language="JavaScript"> var imglist = new Array( "sample1.jpg", "sample2.jpg", "sample3.jpg", "sample4.jpg" ); var selectnum = Math.floor((Math.random() * 100)) % imglist.length; var output = "<img src=" + imglist[selectnum] + ">"; document.write(output); </script> </head> </html>

  • for文のiを使ってリンク先のアドレスを指定したい

    <html> <head> <title></title> </head> <body> <script type="text/javascript"> <!-- document.write("<font size ='7'>一覧</font><br>"); for(i = 1; i<6; i++){ document.write('<a href="jwork01.html">課題1</a><br>'); } //--> </script> </body> </html> >document.write('<a href="test01.html">テスト1</a><br>'); test01~05.htmlのリンクと、文字列テスト1~テスト2までをfor文のiを使って テスト1 テスト2 テスト3 テスト4 テスト5 というように、繰り返し表示たいのですがどうやっても正常に反映されません。単純でカンタンなことだとは思うのですが、、教えて頂けませんでしょうか。 お願いします。

  • while(i<100){

    繰り返し文字を書き込むサンプルコードを拾ったのですが、 意味がわからない部分があるので教えてください。 --------------------------------------------------------- <html> <body> <script type="text/javascript"> var i=0; while(i<100){ if(i==5){ break; } document.write("繰り返し"+(i+1)+"回目<br>"); i=i+1; } </script> </body> </html> ---------------------------------------------------------. while(i<100){ の部分がよくわからないのですが、 なぜ100が出てくるのでしょうか? 「5回繰り返して文字を書き込む」というプログラムになぜ「100」が使われるのか教えてください。 ご回答よろしくお願いします。

  • forループが回らない

    以下のコードで何故for文が回らないのか教えてください。 ど素人の質問で申し訳ありません。 一応、本に書いてある通りにコーディングしたつもりなのですが・・・ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">  <title>なんでforループが回らないの?</title> </head> <body> <script type="text/javascript"> list_term=new Array("HOME", "FAQ", "ご利用規約", "プライバシーポリシー", "サイトマップ", "お問い合わせ"); document.write(list_term[0]+'<br>') document.write(list_term[1]+'<br>') document.write(list_term[2]+'<br>') document.write(list_term[3]+'<br>') document.write(list_term[4]+'<br>') document.write(list_term[5]+'<br>') document.write('<br>')  for(i=0; i==6; i++) document.write(list_term[i]+'<br>') </script> </body> </html>

専門家に質問してみよう