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

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

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

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

Q&A

解決済

3回答

1420閲覧

ランダムで生成した0~30の整数が3回連続で同じ数字だったら処理を止めるには?

kirakira3003

総合スコア20

JavaScript

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

0グッド

0クリップ

投稿2021/04/13 00:43

編集2021/04/13 01:02

JavaScript

1let pre = null; 2let ko = null; 3 4for (let i = 1; i <= 1000; i++) { 5 const ran =Math.floor(Math.random() * 31); 6 if (ko === pre === ran) { 7 break; 8 } else if (pre === ran) { 9 ko = ran; 10 console.log(ran); 11 } else { 12 pre = ran; 13 ko = null; 14 console.log(ran); 15 } 16}

ランダムで生成した0~30のランダムな整数が3回連続で同じ数字だったら処理を止めるコードは
上記のようなコードで合っていますか?

1つ前の数字を変数preに代入し、1つ前の変数と同じ数字が出たら変数koに代入しています。

また、上記のコードが合っていた場合、もっと簡易的に書けるコードがありましたら教えて欲しいです。

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

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

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

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

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

Zuishin

2021/04/13 00:49

3 3 1 3 3 で処理が止まるんじゃないかと思いますが、どうですか?
kirakira3003

2021/04/13 00:54

Zuishinさん。コメントありがとうございます! 確かに、3 3 1 3 3で処理が止まりますね。 ご指摘、ありがとうございます。
guest

回答3

0

カウンター変数を使って、前と同じなら+1して、3になったらbreak。

js

1let pre = null; 2let cnt = 0; 3 4for (let i = 1; i <= 1000; i++) { 5 const ran =Math.floor(Math.random() * 31); 6 console.log(ran); 7 if (pre === ran) { 8 if (++cnt === 3){ break } 9 } else { 10 cnt = 1; 11 pre = ran; 12 } 13}

投稿2021/04/13 01:10

編集2021/04/13 01:14
hatena19

総合スコア34075

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

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

0

ベストアンサー

javascript

1const a=[]; 2const num=3; 3const max=1000; 4for (let i = 1; i <= max; i++) { 5 const ran =Math.floor(Math.random() * 31); 6 a.push(ran); 7 if(a.length>num) a.shift(); 8 if(a.length==num && [...new Set(a)].length==1){ 9 console.log(i); 10 break; 11 } 12} 13

投稿2021/04/13 01:14

編集2021/04/13 01:21
yambejp

総合スコア116732

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

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

yambejp

2021/04/13 01:19 編集

いちいち変数で覚えておくのは無駄なので配列に入れ込んで すべてが一致したときに同じ数が連続したとみなすが楽でしょう (3つくらいならいいですが、4つ5つとなるたびに面倒なので)
kirakira3003

2021/04/14 11:56

ありがとうございました。
guest

0

Array()使ってみた。

javascript

1let hist = new Array(); 2 3for (let i = 1; i <= 1000; i++) { 4 hist.push(Math.floor(Math.random() * 31)); 5 if (hist[hist.length-1] === hist[hist.length-2] === hist[hist.length-3]) { 6 break; 7 } else { 8 console.log(hist[hist.length-1]); 9 } 10}

配列1000個になるのを防ぐ書き方に見直し。

javascript

1let hist = new Array(); 2 3for (let i = 1; i <= 1000; i++) { 4 hist.push(Math.floor(Math.random() * 31)); 5 if (hist.length > 3) { 6 hist.shift(); 7 } 8 if (hist[0] === hist[1] === hist[2]) { 9 break; 10 } else { 11 console.log(hist[hist.length-1]); 12 } 13}

投稿2021/04/13 00:57

編集2021/04/13 01:20
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問