![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- 数学 円周率について。 3 2023/01/26 15:10
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Excel(エクセル) エクセルの数式で教えてください。 1 2022/07/08 13:46
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/10/25 10:52
- Excel(エクセル) Excelで、行に複数の数字が入力されているセルが複数の列存在し、行を跨いでセル内の数値を並び替える 5 2022/06/17 18:03
- Excel(エクセル) B列に、A列の数字が偶数の場合は1減算した数字、奇数の場合はそのまま数字を自動表示したい 4 2022/04/16 12:01
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
laptop go2からの買い替え、lap...
-
スマホでサイトの画像を長押し→...
-
ボカロ動画はFlash?HTML5?
-
ActionScript スクロールメニュー
-
AS3 mc0~5をまとめて処理する
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでボタンを押すと画像をラン...
-
配列の要素番号を取得するには?
-
VB.NET の配列の要素数
-
重複しない乱数整数を発生させる。
-
IDの自動採番について
-
DataGridでCTRLキーを押さずに...
-
重複しない乱数の生成
-
複数の変数宣言を、for文で一気...
-
変な質問ですみません、n番目の...
-
C言語のsizeof(サイズオブ)演算...
-
Vba 配列の中の特定文字列の位...
-
FlashソフトSuzukaで、トランプ...
-
VB6 複数行のテキストをリスト...
-
簡単な当たり判定作りたい
-
【数字ランダム】計算問題ラン...
-
絵を描き、その都度のxy座標を...
-
問題がランダムに出るクイズ
-
ヒープソートの問題について
-
String.prototype.split2d 理...
-
景品パネルの作り方
おすすめ情報