\r\n\r\n\r\n```ここに言語名を入力\r\nJAVASCRIPT\r\nソースコード\r\n```\r\n\r\n・困っていること\r\n上記のコードで正しいと思っていたのですが、 0(ゼロ) とだけ表示されてしまいます。\r\nちなみに、この後この3の倍数を足した合計の数値を表示させなければなりません。\r\nですが、そもそも、3の倍数だけを表示させることができなくて、困っています。","answerCount":6,"upvoteCount":0,"datePublished":"2020-03-10T15:51:40.538Z","dateModified":"2020-03-10T15:51:40.538Z","acceptedAnswer":{"@type":"Answer","text":"forの基本構文について改めて確認してください。\r\n[https://www.sejuku.net/blog/20777](https://www.sejuku.net/blog/20777)\r\n\r\nfor (初期値; 条件式; 増減)\r\n例えばカウンタを「i」とした場合、初期値からスタートし、条件式に合致した場合に、forループ内の処理が実行されます。\r\n今回forを使う意図は1から100についての処理を実行するためであって、それが3で割れるかどうか(if文を使う)の判定はその中で実行する必要があります。\r\n\r\n```JavaScript\r\nfor (var i = 1; i <= 100; i++) {\r\n // i = 1からスタート、毎回1ずつ増えて100まで実行される\r\n // ここでif文を使い、iが3で割れるか判定する\r\n if ([iが3で割れるかの条件式]) {\r\n // iが3で割れた場合ここが実行される\r\n // document.writeなどでiを出力する\r\n }\r\n}\r\n```\r\n\r\n3で割れた数の合計についてですが、例えば累積値を記録しておく変数を用意して、そこに3で割れたときにiを足していく、などでどうでしょうか。","dateModified":"2020-03-10T16:19:09.109Z","datePublished":"2020-03-10T16:19:09.109Z","upvoteCount":3,"url":"https://teratail.com/questions/246348#reply-356959"},"suggestedAnswer":[{"@type":"Answer","text":"別の考え方\r\n```javascript\r\nvar n=3;\r\nvar min=0;\r\nvar max=100;\r\nvar result=Array(Math.floor(max/n)-Math.ceil(min/n)+1).fill(null).map((x,y)=>(y+Math.ceil(min/n))*n).join(\",\");\r\nconsole.log(result);\r\n```","dateModified":"2020-03-11T02:23:55.982Z","datePublished":"2020-03-11T02:16:44.252Z","upvoteCount":3,"url":"https://teratail.com/questions/246348#reply-357037","comment":[{"@type":"Comment","text":"なにも0から100まで全てチェックする必要はないでしょう\r\nまたループ処理も必須ではありません","datePublished":"2020-03-11T02:19:09.923Z","dateModified":"2020-03-11T02:19:30.828Z"},{"@type":"Comment","text":"質問内容の課題を無視して遊んでいる点を評価します。\r\n(真面目な話、考え方を広げてもらう回答として)","datePublished":"2020-03-11T02:24:06.585Z","dateModified":"2020-03-11T02:24:06.585Z"},{"@type":"Comment","text":"せっかくなのでforだとこんな感じですかね\r\nvar n=3;\r\nvar min=0;\r\nvar max=100;\r\nfor(var i=0;i for文では1度目のループの時点でi %3 ===0\r\nという条件を満たしていないため\r\n\r\nどうカウントしているのかわかりませんが、一周目の開始時点では満たしています。","datePublished":"2020-03-10T23:12:50.435Z","dateModified":"2020-03-10T23:12:50.435Z"},{"@type":"Comment","text":"指摘ありがとうございます。\r\n`int i = 1`にしたつもりでしたが誤記でした。\r\n補足修正しておきました。","datePublished":"2020-03-10T23:27:41.502Z","dateModified":"2020-03-10T23:27:41.502Z"},{"@type":"Comment","text":"ありがとうございます!","datePublished":"2020-03-11T12:37:02.001Z","dateModified":"2020-03-11T12:37:02.001Z"}]},{"@type":"Answer","text":"1から順番に+1していき、その数値に3を掛けて、結果100以上であれば終了、そうでなければ出力してループ、という処理でいいのでは。","dateModified":"2020-03-10T16:15:23.984Z","datePublished":"2020-03-10T16:15:23.984Z","upvoteCount":4,"url":"https://teratail.com/questions/246348#reply-356958","comment":[{"@type":"Comment","text":"0からじゃね?","datePublished":"2020-03-10T19:39:15.865Z","dateModified":"2020-03-10T19:39:15.865Z"},{"@type":"Comment","text":"1から、とかいてあります","datePublished":"2020-03-11T01:31:23.140Z","dateModified":"2020-03-11T01:31:23.140Z"},{"@type":"Comment","text":"2 からと書いてあったら 2 から始めてはいけないのでは?","datePublished":"2020-03-11T01:37:39.566Z","dateModified":"2020-03-11T01:37:39.566Z"},{"@type":"Comment","text":"お~失礼^^;\r\nタイトルと、質問内の表現が違ってたw\r\n気が付きませんでした。申し訳ない。\r\nどっちが正しいんだろ。。。","datePublished":"2020-03-11T01:48:47.412Z","dateModified":"2020-03-11T01:48:47.412Z"},{"@type":"Comment","text":"こういうことですね。\r\nfor ( var r=[],tmp=0,i=1; tmp<100; i++ ) {\r\n if (tmp=i*3) r.push(tmp);\r\n}\r\nご指摘を受けて修正しております。","datePublished":"2020-03-11T02:14:45.194Z","dateModified":"2020-03-11T03:31:33.187Z"},{"@type":"Comment","text":"> AkitoshiManabe さん\r\n色々間違ってるので、ちゃんとテストしてから記述したほうが良いかと。","datePublished":"2020-03-11T03:09:45.416Z","dateModified":"2020-03-11T03:09:45.416Z"},{"@type":"Comment","text":"te2ji さん、ありがとうございます。console.time() を並べて試したこともありバグをコメントしておりました(var 宣言の怖さを改めて実感しております)。","datePublished":"2020-03-11T03:35:31.397Z","dateModified":"2020-03-11T03:35:31.397Z"},{"@type":"Comment","text":"ありがとうございます!","datePublished":"2020-03-11T12:38:14.801Z","dateModified":"2020-03-11T12:38:14.801Z"}]},{"@type":"Answer","text":"ループが1回で止まってしまっているようです。\r\n\r\n具体的には、iが加算されて「1」になったとき「i % 3 === 0」の条件式がfalseになり、\r\nその時点でループが終わってしまっています。\r\n\r\n以下のような形に分解すると、動くかと思われます。\r\n```JS\r\nfor (var i = 0; i <= 100; i++) {\r\n if (i % 3 === 0) {\r\n ...\r\n }\r\n}\r\n```","dateModified":"2020-03-10T16:07:13.211Z","datePublished":"2020-03-10T16:05:22.423Z","upvoteCount":1,"url":"https://teratail.com/questions/246348#reply-356955","comment":[{"@type":"Comment","text":"ありがとうございます!","datePublished":"2020-03-11T12:38:30.138Z","dateModified":"2020-03-11T12:38:30.138Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"forに関する質問","url":"https://teratail.com/tags/for"},{"@type":"ListItem","position":3,"name":"for","url":"https://teratail.com/tags/for"}]}}}
質問するログイン新規登録
for

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

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

6回答

16281閲覧

0~100までの間で、3の倍数だけを表示させたい

robben

総合スコア12

for

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

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/03/10 15:51

0

0

forループに関して、初歩的な質問です。いろいろ試したり調べたりしたのですが、解決しないので、ご教授願います。

・課題
「1から100までの間で、3の倍数の数だけ表示してください」

・自分のコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>t</title> </head> <body> <script> for(var i=0;i<=100&&i%3===0;i++){ document.write(i); }  </script> </body> </html> ```ここに言語名を入力 JAVASCRIPT ソースコード ```

・困っていること
上記のコードで正しいと思っていたのですが、 0(ゼロ) とだけ表示されてしまいます。
ちなみに、この後この3の倍数を足した合計の数値を表示させなければなりません。
ですが、そもそも、3の倍数だけを表示させることができなくて、困っています。

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

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

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

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

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

guest

回答6

0

1から順番に+1していき、その数値に3を掛けて、結果100以上であれば終了、そうでなければ出力してループ、という処理でいいのでは。

投稿2020/03/10 16:15

y_waiwai

総合スコア88186

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

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

退会済みユーザー

退会済みユーザー

2020/03/10 19:39

0からじゃね?
y_waiwai

2020/03/11 01:31

1から、とかいてあります
Zuishin

2020/03/11 01:37

2 からと書いてあったら 2 から始めてはいけないのでは?
退会済みユーザー

退会済みユーザー

2020/03/11 01:48

お~失礼^^; タイトルと、質問内の表現が違ってたw 気が付きませんでした。申し訳ない。 どっちが正しいんだろ。。。
AkitoshiManabe

2020/03/11 03:31 編集

こういうことですね。 for ( var r=[],tmp=0,i=1; tmp<100; i++ ) { if (tmp=i*3) r.push(tmp); } ご指摘を受けて修正しております。
退会済みユーザー

退会済みユーザー

2020/03/11 03:09

> AkitoshiManabe さん 色々間違ってるので、ちゃんとテストしてから記述したほうが良いかと。
AkitoshiManabe

2020/03/11 03:35

te2ji さん、ありがとうございます。console.time() を並べて試したこともありバグをコメントしておりました(var 宣言の怖さを改めて実感しております)。
robben

2020/03/11 12:38

ありがとうございます!
guest

0

別の考え方

javascript

1var n=3; 2var min=0; 3var max=100; 4var result=Array(Math.floor(max/n)-Math.ceil(min/n)+1).fill(null).map((x,y)=>(y+Math.ceil(min/n))*n).join(","); 5console.log(result);

投稿2020/03/11 02:16

編集2020/03/11 02:24
yambejp

総合スコア118164

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

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

yambejp

2020/03/11 02:19 編集

なにも0から100まで全てチェックする必要はないでしょう またループ処理も必須ではありません
AkitoshiManabe

2020/03/11 02:24

質問内容の課題を無視して遊んでいる点を評価します。 (真面目な話、考え方を広げてもらう回答として)
yambejp

2020/03/11 02:41

せっかくなのでforだとこんな感じですかね var n=3; var min=0; var max=100; for(var i=0;i<Math.floor(max/n)-Math.ceil(min/n)+1;i++){ console.log((i+Math.ceil(min/n))*n); }
robben

2020/03/11 12:34

ありがとうございます!
guest

0

ベストアンサー

forの基本構文について改めて確認してください。
https://www.sejuku.net/blog/20777

for (初期値; 条件式; 増減)
例えばカウンタを「i」とした場合、初期値からスタートし、条件式に合致した場合に、forループ内の処理が実行されます。
今回forを使う意図は1から100についての処理を実行するためであって、それが3で割れるかどうか(if文を使う)の判定はその中で実行する必要があります。

JavaScript

1for (var i = 1; i <= 100; i++) { 2 // i = 1からスタート、毎回1ずつ増えて100まで実行される 3 // ここでif文を使い、iが3で割れるか判定する 4 if ([iが3で割れるかの条件式]) { 5 // iが3で割れた場合ここが実行される 6 // document.writeなどでiを出力する 7 } 8}

3で割れた数の合計についてですが、例えば累積値を記録しておく変数を用意して、そこに3で割れたときにiを足していく、などでどうでしょうか。

投稿2020/03/10 16:19

Takumiboo

総合スコア2536

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

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

robben

2020/03/11 12:37

ありがとうございます。!
guest

0

あんまり回答になってないです

wikipedia で倍数確認すると

数学において、数 a の倍数(ばいすう、英:multiple)とは、a を整数倍した数、あるいはそれらの総称である。つまり、 … −3a, −2a , −a, 0, a, 2a, 3a, … を指す。a ≠ 0 ならば、a の倍数は無数に存在する。 a を整数に限ると、a の倍数とは「a で割り切れる整数」のことであり、a の約数(「a を割り切る整数」)と対比されることも多いが、倍数は a が整数でなくても定義できる。

とあり、「割り切れる数字を表示する」を素直に記述すると

JavaScript

1for(let i=0;i<=100;++i){ 2 if(i%3===0)console.log(i); 3}

になると思います。

で、プログラマーが考える場合、「この数字、作れるでしょ」ってなって

JavaScript

1for(let i=0;i<=100;i+=3){ 2 console.log(i); 3}

って解が発生します。

今回のケースでは、あまり意味がありませんが、質問をプログラマー視点で読み替えるのは非常に重要です。
参考まで。

投稿2020/03/10 23:25

編集2020/03/10 23:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/03/10 23:31

100 を含むのか含まないのかは確認したほうが良いと思います。
robben

2020/03/11 12:36

ありがとうございます!
guest

0

他の方もおっしゃっているようにこのfor文では1度目のループの時点でi %3 ===0
という条件を満たしていないため値が取得できない結果となっています。

ですのでfor文の中でi %3 ===0の場合の処理を行ってあげてください。

補足

条件が「1~100の間」で3の倍数が欲しいということなら0は不要かと思いますので
int i = 1からスタートするのがよいかと思います。

JavaScript

1for(var i = 1; i <= 100; i++){ 2 if(i % 3 === 0){ 3 console.log(i); //値の出力のみ 4 } 5}

投稿2020/03/10 22:34

編集2020/03/10 23:29
tmp-user

総合スコア44

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

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

退会済みユーザー

退会済みユーザー

2020/03/10 23:12

> for文では1度目のループの時点でi %3 ===0 という条件を満たしていないため どうカウントしているのかわかりませんが、一周目の開始時点では満たしています。
tmp-user

2020/03/10 23:27

指摘ありがとうございます。 `int i = 1`にしたつもりでしたが誤記でした。 補足修正しておきました。
robben

2020/03/11 12:37

ありがとうございます!
guest

0

ループが1回で止まってしまっているようです。

具体的には、iが加算されて「1」になったとき「i % 3 === 0」の条件式がfalseになり、
その時点でループが終わってしまっています。

以下のような形に分解すると、動くかと思われます。

JS

1for (var i = 0; i <= 100; i++) { 2 if (i % 3 === 0) { 3 ... 4 } 5}

投稿2020/03/10 16:05

編集2020/03/10 16:07
new1ro

総合スコア4528

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

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

robben

2020/03/11 12:38

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問