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

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

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

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

Q&A

解決済

3回答

1095閲覧

javascript サイコロを振り(1~6の乱数を出し)その数を合計

homel15k

総合スコア19

JavaScript

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

1グッド

0クリップ

投稿2018/02/04 07:14

編集2018/02/04 07:24

js初心者のものです。

サイコロを振り(1~6の乱数を出し)その数を合計していきます。ただし、1が出たらそこで終了です(1も合計します)。それまでの合計を表示します。さいころを振るたびに値を表示してください。
という問題が解けません。

以下のコードを実行するとエラーは出ませんが、0がたまに出てくるのでおかしいです。また、さいころを振るたびに値を表示の部分をalert(sai)でやろうと思うと無限ループになってしまうのでどうやればいいのかがわからなかったです。

よろしくお願いします。

javascript

1コード 2sai = parseInt(Math.floor(Math.random()*6+1)); 3sum = 0; 4while(sai>1){ 5 sai = parseInt(Math.floor(Math.random()*6+1)); 6 sum = sum+sai; 7 if(sai===1){ 8 sum = sum+1; 9 } 10} 11alert(sum);
miyabi-sun👍を押しています

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

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

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

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

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

kei344

2018/02/04 07:16

「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
kei344

2018/02/04 07:36

「無限ループになる」書き方も質問文に追記してみてください。
guest

回答3

0

ベストアンサー

0がたまに出てくる

これに関しては、最初が1だとループに入らないので、sumへの加算は全く行われません。

さいころを振るたびに値を表示の部分をalert(sai)でやろうと思うと無限ループになってしまう

無限に発生するわけではないですが、ループを終わりきるまでalertがで続けて、鬱陶しいことは間違いないと思います。

デバッグ出力についてはconsole.logを使って、実行は邪魔せずにコンソールに出力するのが便利です。F12を押して出るウィンドウから「コンソール」を選べば確認できます。

投稿2018/02/04 07:35

maisumakun

総合スコア145121

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

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

homel15k

2018/02/04 07:51

回答ありがとうございます。console.logで出力すると結果がわかりやすくすぐに解決できました。
guest

0

本件は終了していますが、
少々リファクタリングしておきます。

JavaScript

1// サイコロを振る箇所は関数化して外出しできます 2var diceRoll = function () { 3 return parseInt(Math.floor(Math.random() * 6 + 1)); 4} 5 6var sum = 0; 7// 条件はtrueにしておくと、コードを読んだ人が「無限ループがあるぞ!気をつけろ!」となるのでオススメ 8while (true) { 9 var dice = diceRoll(); 10 sum += dice; 11 if (dice <= 1) { 12 // break構文を利用して確実に抜ける 13 break; 14 } 15} 16alert(sum);

連続してダイスロールするってあれですね、TCGの連続攻撃スキルっぽくて良いですよね。
触ってみたら楽しくなってきたので魔改造してみました。

JavaScript

1var diceRoll = function () { 2 return parseInt(Math.floor(Math.random() * 6 + 1)); 3} 4// 継続条件の関数を受け付けるよう改修 5var getDices = function (success) { 6 var dices = []; 7 while (true) { 8 var dice = diceRoll(); 9 dices.push(dice); 10 if (!success(dice)) { 11 break; 12 } 13 } 14 return dices; 15} 16// 関数.bindを利用して、次は()を使って実行するだけでダイスロールを繰り返した結果が得られる 17var continuousAttack = getDices.bind(null, function(dice){ return dice > 1 }); 18 19var dices = continuousAttack(); 20var sum = dices.reduce(function(a, b){ return a + b }, 0); 21console.log(sum, dices); 22// 何度か実行してみた 23// 41 [ 3, 4, 2, 5, 5, 4, 2, 4, 2, 2, 5, 2, 1 ] 24// 11 [ 6, 4, 1 ] 25// 34 [ 5, 5, 3, 4, 5, 2, 4, 2, 3, 1 ]

こんな感じで名前にすると分かりやすいのでオススメです。

投稿2018/02/05 04:52

miyabi-sun

総合スコア21158

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

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

homel15k

2018/02/08 03:03

回答ありがとうございます。面白いプログラムで参考になりました!
guest

0

見た感じほとんど完成しているので、あとは各変数に値を入れた後にalertやconsole.logしてみて、想像している値と同じになっているかを確認すればすぐに完成すると思います。実際に値を見てみる事は重要です。

投稿2018/02/04 07:36

dala00

総合スコア441

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問