Javascript
1let randoms = []; 2let min = 1,max = 10; 3 4let getRandom(min,max){ 5 return Math.floor(Math.random()*(max - min +1)+min); 6} 7 8for (i = min; i <= max ; i++){ 9 while(true){ 10 let tmp = getRandom(min,max); 11 if(!randoms.includes(tmp)){ 12 randoms.push(tmp); 13 break; 14 } 15 } 16}
ネットの記事や本を見て1から10までの乱数を発生させる記述を作りましたが、実行すると Expected";"と表示されてしまいます。
もう一歩のような感じがしますが、;は不足していないように思うのですが、どこがいけないのかご教示いただけないでしょうか。よろしくお願いします。
自身で自身のコードを解説できますか?
過去質問を併せて鑑みて、
まだ基本も理解できてないとお見受けします。
基本を理解されてない質問者さんが、
while(true)なんて使っちゃいけません。(JSじゃなくても、Javaではよく使われるらしいが、それでもwhileの性質を理解しないで使うのは危険)
含め、自身のコードをしっかり理解しましょう。
そのう・・・質問とは外れるんですけど。
そのロジックだと、範囲が狭いうちはいいものの、1~1000とか大きい範囲の乱数を作ろうとすると、時間がかかりすぎると思います。
それは1000個の穴を作って、その穴にボールが全部キレイに収まるまで、目隠しをしながらボールを投げ続けるようなものです。
その拷問じみた遊びは、終わりに近づくに連れ難易度が増すというのは分かっていただけるでしょうか。
質問から離れてしまって申し訳ないのですが、ロジックを考え直すことをおすすめします。
yutamppさん>
例えがめちゃくちゃしっくりきました・・・。
下手したら無限に等しい処理数になる可能性がありますよね。
皆様のご指摘の通りで、以下の記述あたりは
while(true){
let tmp = getRandom(min,max);
if(!randoms.includes(tmp)){
randoms.push(tmp);
大体こんな意味かなという感じでとらえていました。
よって今回の記述はあきらめて出直します。
ありがとうございました。
変数と関数あたりの基本からやりなおしたほうが良いかと。やりたいことだけを追求しても書いた通りにしか動かないので基礎がごっそり抜けてる状態で動かないのは当然です(たぶんこれ初めての指摘じゃないはずなんだが)
回答3件
あなたの回答
tips
プレビュー