JavaScript講座
(メールマガジン編)

12/06日発行 ヨッシーの”ホームページを作ろう!(JavaScript編)”★Vol.22★

乱数

乱数とは、ランダムな数字のことで、プログラムを実行するたびに、違う数を得ることができるんだ。
だから、このランダムな数字とif文などの条件分岐を使えば、おみくじなどのようなちょっとしたゲームだって作れるんだ。

★ 乱数 ★

じゃあ、まず乱数(ランダムな数字)を呼び出す命令をやってみよう。

(0以上1未満の)乱数を発生させる

Math.random()

これを使うだけで、ランダムな数字を得ることができるんだ。
この命令は、0以上1未満の数字のうちランダムな数字(乱数)を出してくれる
(※1未満とは1は含まない)
じゃあ、これを使ってプログラムを作ってみよう・・・・と言いたいんだけど、この命令によって得られる数字は0以上1未満の数字のうちのどれか
つまり、0.12や0.56などのような小数になってしまうんだ。
プログラムでよく使用するのはどちらかというと整数(0,1,2,3,4・・・・等)だよね。
だから、この命令で得られた乱数じゃ使えないよね。
そこで、この出てきた乱数を整数に直したいよね。

これからプログラムの前に、整数の乱数を得る方法をやってみよう。
例えば、0以上10未満の整数の乱数を得たい場合はどうすればいいだろう。
まず、整数ということを考える前に、単に0以上10未満ということから考えよう。
これは簡単。ただ単にさっきの乱数を10倍してやればいい。
そうすれば、0以上10未満の乱数が得られるね。(まだ整数ではない)

〜よくわからない人は、こう考えよう。〜
元の乱数は0以上1未満だったよね。
つまり、元の乱数で得られる数字の最低は0だね。
だから、10倍したあとも最低の数字は0だね。
次に、元の乱数の最高の数字は1だね(未満だから本当は1は入らないが、考えやすくするために1と考える)。
だから、10倍すると最高の数字は10になるね。
そして、最低が0、最高が10なので、乱数の範囲は0以上10未満になるんだ。
※数学的に考えると次のようになる。
求まる乱数をXとすると、
0<=X<1
それぞれを10倍
0<=10X<10
つまり、10X(元の乱数を10倍した数字)は0以上10未満である。)

<まとめ>
1以上10以下の乱数を得る。
Math.random()*10

これでまず、0から10の間の乱数が求まったね。
あとは、少数で表されている乱数を整数に直せばいいので、
以前(Vol.13)にも少しやったMath.floor(値)というのを使って少数以下を切り捨てよう。
(※ついでにMath.ceil(値)についてもやっておこう)

少数を整数に切り捨てる(1.3→1   2.5→2)

Math.floor(値)

 

少数を整数に切り上げる(1.3→2   2.5→3)

Math.ceil(値)

なので、さっき作った1以上10未満の乱数を使って、

Math.floor(乱数) ⇒ Math.floor(Math.random()*10)

これで、0以上10未満の整数(つまり、0〜9の数字)のどれかを得る命令ができたんだ。
(※ちなみに、1〜10の数字を得たい場合は、出てきた乱数に1を足せばよい)
じゃあ、ここで最終的なまとめをしよう。

<まとめ>
0〜N−1までの整数をランダムに得る。
※0〜N-1なので気をつけること。
Math.floor(Math.random()*N)

例)
0-9:Math.floor(Math.random()*10)
0-99:Math.floor(Math.random()*100)

これで、乱数を得る命令がわかったので、
実際に乱数を使ったプログラムを作ってみよう。


--ランダムに挨拶を表示する--

<HTML>
<HEAD>
<TITLE>ランダム挨拶</TITLE>
<SCRIPT language="JavaScript">
comment = new Array(3);
comment[0]="HTMLでホームページを作ろう!";
comment[1]="スタイルシートでデザインしよう!";
comment[2]="JavaScriptでページに動きをつけよう!";
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
n = Math.floor(Math.random()*3);
document.write(comment[n]);
</SCRIPT>
</BODY>

≪結果≫


↑ランダムで表示する


--解説--

<HTML>
<HEAD>
<TITLE>挨拶</TITLE>
<SCRIPT language="JavaScript">
comment = new Array(3);       ←配列の箱を3つ作った
comment[0]="HTMLでホームページを作ろう!";
comment[1]="スタイルシートでデザインしよう!";
comment[2]="JavaScriptでページに動きをつけよう!";
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
n = Math.floor(Math.random()*3);  ←0〜2までの乱数をnに代入
document.write(comment[n]);    ←nを使ってコメントを表示
</SCRIPT>
</BODY>


まず、<HEAD>の中をやろう。
配列の作り方を思い出してね。
    変数 = new Array(個数)
だったね。
あとは、順にコメントを設定しているだけだよ。

次に<BODY>の中の表示部分
    n = Math.floor(Math.random()*3);
これはさっきやった方法で0,1,2の乱数を得て、それをnに代入しているんだ。
そして、
    document.write(comment[n]);
これは、nによってコメントが変わるのはわかるかな。
例えばn=0ならcomment[0]が表示されるし、n=2ならcomment[2]が表示されるよね。
このようにして、乱数を使ってコメントをかえることができるんだ。


 

<問題>
■命令■のところを埋めて、
画像をランダムに表示するプログラムを作れ。
※余力があれば、下のLevel2もやってみよう。

〜Level.1〜
画像をランダムに表示

<HTML>
<HEAD>
<TITLE>ランダム画像</TITLE>
<SCRIPT language="JavaScript">
■命令■
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
■命令■
</SCRIPT>
</BODY>

〜Level2〜
あなたの人のバナーを毎回トップページで一人だけ紹介。
のようなときに使う、ランダムバナーリンクを作ってみよう。



back.gif (1116 バイト) next.gif (705 バイト) top.gif (583 バイト)