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

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

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

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

Q&A

解決済

3回答

3446閲覧

javascriptのfor文を使用して思ったような処理がされません

busshi77

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2016/11/13 18:06

編集2016/11/14 02:25

javascriptのfor文についてお願いします。
for文を使用して100回1を足して、3の倍数ときだけ1を足さないという処理をしようとしています。
あくまでもfor文のみを使用して計算結果をだそうとしていますが、うまくいきません。よろしくお願いします。

HTML

1<p onclick = "suji100();", id = "suji100">100回1加算、3の倍数のときだけ1を足さない</p>

javascript

1function suji100(){ 2var suji = document.getElementById("suji100"); 3var a = 0; 4 5for(var num = 0; num < 100; num += 1){ 6 a += 1; 7for(var num = 0; num < 100; num += 3){ 8 a -= 1; 9 } 10 suji.addEventListener("click", function(){ 11 suji.innerHTML = "<p>100回1を足すが3の倍数の場合は1を足さない</p><p>答え: " + a + " </p>"; 12 }, false); 13 } 14 }

答え: -33

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

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

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

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

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

kei344

2016/11/13 18:32

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答3

0

for文を使用して100回1を足して、3の倍数ときだけ1を足さないという処理をしようとしています。

よく考えて見てくださいな。

ループ1回目 → 1
ループ2回目 → 2
ループ3回目 → 3

足していないので、次も3
以降ずっと3...

ループが終わらない。

書いてある命題と、コードに書かれている内容と矛盾しているので、一体何を求めようとしているのか、読み取れません。

投稿2016/11/13 18:21

編集2016/11/13 18:24
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

busshi77

2016/11/14 02:17

ご回答ありがとうございます。まだまだ勉強不足なところが多いのでもう一度みなおさせていただきます。
guest

0

ベストアンサー

HTML

1<!-- ↓ 「,」は不要(文法に無い) --> 2<p onclick = "suji100();", id = "suji100">100回1加算、3の倍数のときだけ1を足さない</p> 3<!-- ↑addEventListener使うなら不要 -->

JavaScript

1function suji100() { 2 var suji = document.getElementById("suji100"); 3 var a = 0; 4 5 for (var num = 0; num < 100; num += 1) { 6 a += 1; 7 // ↓ var は function がスコープになるのでこれは上で定義したものを上書きしている 8 for (var num = 0; num < 100; num += 3) { // 3の倍数だけマイナスする() 9 a -= 1; 10 } 11 // for の中でaddEventListenerをすると for が回るだけイベントを追加する。今回は全部上書きなので「見えない」が、もう少し書き方を考えるべき。 12 suji.addEventListener("click", function() { 13 suji.innerHTML = "<p>100回1を足すが3の倍数の場合は1を足さない</p><p>答え: " + a + " </p>"; 14 }, false); 15 } 16}

例えばこうする↓

JavaScript

1var suji = document.getElementById( 'suji100' ); 2 3function suji100() { 4 var a = 0; 5 var num; 6 for ( num = 0; num < 100 ; num++ ) { 7 if ( num % 3 === 0 ) { continue; } 8 a += 1; 9 } 10 return a; 11} 12 13suji.addEventListener( 'click', function() { 14 suji.innerHTML = '<p>100回1を足すが3の倍数の場合は1を足さない</p><p>答え: ' + suji100() + ' </p>'; 15}, false ); 16```**動くサンプル:**[https://jsfiddle.net/67sq5a2r/](https://jsfiddle.net/67sq5a2r/)

投稿2016/11/13 18:56

kei344

総合スコア69398

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

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

busshi77

2016/11/14 02:14

ありがとうございます!参考にさせていただきます!
kei344

2016/11/14 02:16

情報の追加・修正の依頼も出しているので、確認しておいてください。
guest

0

同じnumについて二重ループになっているので、意味不明のプログラムになっています。

末尾の}を、a+=1;の直後に移動させて、ループを独立させてください。

投稿2016/11/13 22:27

otn

総合スコア84491

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

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

busshi77

2016/11/14 02:22

ご回答ありがとうございます。試してみます。
otn

2016/11/14 08:51

「試してみます」じゃなくて、試してからコメントしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問