質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

2489閲覧

名前を検索するプログラム i++ i+1の意味合いの違い for無限ループ

masaakitsuyoshi

総合スコア102

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/02/25 04:14

名前を検索するプログラムを作っていて、forを使っています。

下のコードで、コードBが正解でコードAが間違い (i+1 i++ の違い)
なのですが、なにがどう違うんでしょうか?

コードAのforの意味は、
変数 i=0
textの長さまで、i+1を繰り返す

で、

コードBのforの意味は、

変数i=0
textの長さまで i+iを繰り返す

ってとこまではなんとな~くわかってるつもりなのですが、
なぜ、0+0を繰り返すんでしょうか?

そもそもi=0なのはなぜでしょうか。

0=false
なので、flaseしないと無限ループしてしまうから?

だとしたら、
for(var i = false; i<text.length; I++){};
でも合ってますか?

コードA

/*jshint multistr:true */ var text ="Masaaki baa baa baa baa baa Masaaki baa baa baa baa baa Masaaki baa"; var myName = "Masaaki"; var hits =[]; for (var i=0; i< text.length ; i+1) { };

コードB

var text ="Masaaki baa baa baa baa baa Masaaki baa baa baa baa baa Masaaki baa"; var myName = "Masaaki"; var hits =[]; for (var i=0; i< text.length ; i++) { };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

JavaScriptでのfor文の書き方に関しての疑問ということでよろしいでしょうか?

JavaScriptに限らず、一般的なインクリメント構文がある言語では、
i++ (または ++i)は、i = i + 1 と同じ内容です。
これは i + 1の結果をiに代入するという「代入処理」を行うということです。
またi + 1だけでは何も処理をしていないことになり、言語によっては構文エラーとして検出されます。

記号「=」は数学的な等価を表すのではなく、左矢印「←」の代わりだと考えるとわかりやすいです。
等価を表す記号はプログラミング言語によって異なり、「==」を使うものや「=」で表すものなどがあります。

for文は繰り返し処理を行うための構文で、下記の様になります。

lang

1for ( [A:変数初期化処理] ; [B:条件判断] ; [C:(条件判断に使用される変数に対する)繰り返し処理]) { 2 [繰り返し処理]; 3}

Bのパートは結果がTrueかFalseになる様な条件文を記載することになります。
Cのパートは一般にインクリメント文が使用されます。

Bのパートで「条件判断文を間違えてる」、
Cのパートで「違う変数を使用してしまう」、「正しくインクリメントされていない」
などが起こると無限ループに陥ったり、一度も処理がされずに先に進んでしまうなどが起こりえます。
Cのパートに i+1 を記述することが「インクリメントされていない」にあたると思います。

ご参考になりますでしょうか?

投稿2016/02/25 04:48

Aeona

総合スコア396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

i+1とi++で動きが違う原因は自己回答の通りです

そもそもi=0なのはなぜでしょうか。

これは配列の先頭を示す添え字が0から始まるからです。

投稿2016/02/25 04:25

kutsulog

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

Aの書き方では、正しくは
for (var i=0; i< text.length ; i+=1){};
または、
for (var i=0; i< text.length ; i=i+1){};
になります。
i=という記述がないので、iに代入されていないです。

またBのi++はインクリメントと言います。
処理としてはi=i+1に近いですが、まずはご自身で調べてみてください。

投稿2016/02/25 04:22

sonor_3rd

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

for() の3番目、繰り返しの時に実行する文を書くので、
i++とするとiの数字を1足したものに置き換えるという意味ですが、
i+1とするとiの数字に1を足しただけでiには保存されません。

コードBは、i++であってi+iではないですよ。
i++はインクリメントする演算子(加算子)で、1を足すのとほぼおなじ意味です。

また、i=0なのは、文字の位置がゼロからはじまるからで、
ゼロのとき最左端の文字位置になります。
だから、2文字目は1ですし。

i=falseは意味が違います。
結果が同じだとしても、たまたまfalse値を保存している変数iを数字として解釈するための
暗黙の変換がかかってゼロとみなされただけです。
インクリメントする際にfalse+1だと暗黙の変換がかかって結果1になっても、
false++は文法エラーで成り立ちません。
false値はあくまでfalseであって、暗黙の変換がかかってたまたまゼロとみなされるだけです。

投稿2016/02/25 04:22

編集2016/02/25 04:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

i=i+1

i+1

のみにしていた。

i=i+1
i+=1
i++

と書けばよかった

投稿2016/02/25 04:20

masaakitsuyoshi

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問