![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
windows2000
Flash MX
1~9までの数字をランダムに発生させ配列に入れるには
v_count=new Array();
for(i=1; i<10; i++) {
v_max=9
v_count[i]=Math.floor(Math.random()*v_max)+1 }
と記述しました。
配列に格納されたランダムに発生した数字が9個ありますが当然同じ数字も含まれています。
これを数字が重複しないようにする方法が知りたいのです。
つまり1~9までの数字をランダムに並べ替えたいのですがどのような方法がありますか。教えて下さい。
説明が下手でスミマセン。
ご指摘いただければ補足します。
No.3ベストアンサー
- 回答日時:
基本的には、予め配列に1~9の数字を入れておいて、この配列を並び替えることで、重複する数字のないランダムな数列を作れます。
並び替える方法は様々ですが、簡単なところで次のような考え方はいかがでしょう。
配列のインデックス値は0から始まります。配列の要素が9つであれば、インデックス値は0~8です。
0~8の間で乱数を2つ作ります。これをインデックス値として指定して、配列の要素をランダムに2つ選択し、この2つの値を互いに入れ換えます。
この作業を好きなだけ繰り返すと、ランダムな並びになります。
変数は新しい値を入れると、入っていた値は上書きされて消えてしまいます。入れ換える時には、もう1つ変数を用意して、どちらかの値を保存しておきましょう。
シャッフルの回数は多いほどいいというわけでもありませんが、さしあたって 30 回ほど繰り返すとすると、大体のスクリプトは次のようになるかと思います。
(↓このスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)
//変数と配列を用意する
var i , temp , rnd1 , rnd2 ;
v_count = new Array() ;
//配列に1~9を入れる
for ( i = 0 ; i < 9 ; i++ )
{
v_count[ i ] = i + 1 ;
}
//シャッフルを30回実行
for ( i = 1 ; i <= 30 ; i++ )
{
//1つめの要素を選択
rnd1 = Math.floor( Math.random() * ( 8 - 0 + 1 ) ) + 0 ;
//2つめの要素を選択
rnd2 = Math.floor( Math.random() * ( 8 - 0 + 1 ) ) + 0 ;
//1つめの値を作業用変数に保存
temp = _root.v_count[ rnd1 ];
//2つの値を入れ換える
_root.v_count[ rnd1 ] = _root.v_count[ rnd2 ] ;
_root.v_count[ rnd2 ] = temp;
}
処理の上ではあまりスマートとは言えませんが、単純なスクリプトでできる、簡単な方法です。
よろしければ、ご参考までに。
ご回答ありがとうございます。
成る程こんな方法もあったんですね。
たいへん勉強になりました。
そして早速利用さしていただきます。
No.2
- 回答日時:
最初の方のやり方でもよいのですが、配列の要素を入れ替える回数が多くなってしまうし、乱数の出方が悪いとうまくランダムに並べ変わらないので、次のやり方のほうがよいと思います。
1. 配列の要素を1~9でそれぞれ初期化する。
2. 1~9の乱数Rを取り出し、R番目と9番目の要素を入れ替える。
3. 1~8の乱数Rを取り出し、R番目と8番目の要素を入れ替える。
4. 1~7の乱数Rを取り出し、R番目と7番目の要素を入れ替える。
(中略)
9. 1~2の乱数Rを取り出し、R番目と2番目の要素を入れ替える。
この方法だとわずか8回の入れ替えで完全にランダムな数列を作れます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スマホでサイトの画像を長押し→...
-
potplayerについて質問です
-
uwscでExcelに自動記入
-
ゲオでカードを作るのは何歳か...
-
サーフェスで音楽を聴くにはど...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでボタンを押すと画像をラン...
-
変な質問ですみません、n番目の...
-
配列の要素番号を取得するには?
-
VB.NET の配列の要素数
-
DataGridでCTRLキーを押さずに...
-
重複しない乱数の生成
-
ランダム表示を重複させないよ...
-
VB6 複数行のテキストをリスト...
-
絵を描き、その都度のxy座標を...
-
複数の変数宣言を、for文で一気...
-
AS3.0 二次元配列でムービーク...
-
ランダムに数字を並び変える方法は
-
Vba 配列の中の特定文字列の位...
-
IDの自動採番について
-
[Objective-c]多次元配列のアク...
-
データ構造のテキスト保存につ...
-
awkスクリプトの実行が遅い
-
配列操作
-
yes no で、50質問してyesの数...
-
このソースで、仕組みについて...
おすすめ情報