• ベストアンサー

Javascript について質問です。

Math.floor(Math.random()*5 + 1) 上記の構文の意味について教えてください。 Math.random()が、0-1の間のどれかの数字を出力し、そのどれかの数字を*5しており、もし少数点が出たら、Math.floorで端数をきり、最後に+1するということでよろしいでしょうか? 自分が参考にしているサイトは、下記のように書かれてありました。 ”0-4の間の数字から、1から5までの数字の間までの数字を変化させる” 上記の文についてですが、0-5までで、1-6まで変化させることを表していると思うのですが、どうですか? 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

間違ってます。 Math.random() は、0以上1未満の数を返します。これを5倍するので、0以上5未満になり、さらに1を足すので、1以上6未満の数になります。これのMath.floorなので、1から5ですね。 randomは1を返さないので、最後の答えが6になることはありません。

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

>Math.random()が、0-1の間のどれかの数字を出力し、そのどれかの数字を*5しており、 >もし少数点が出たら、Math.floorで端数をきり、最後に+1する おしいっ Math.random()が、0-1の間のどれかの数字を出力し、そのどれかの数字を*5しており、 +1してから、もし少数点があったら、Math.floorで端数をきる まあ、結果は同じなんだけど >0-5までで、1-6 これはあなたが正解 参考にしたサイトの記述が間違っているわね

関連するQ&A

  • JavaScriptを使ってロト6の当選数字を予想するプログラムを考えたのですが・・・

    Math.floor(Math.rondom()*10);を使うと、小数点以下の数字を出さない。 と先生に教えられたのですが、 ((Math.floor(Math.random() * 10)) + (Math.floor(Math.random() * 10))) * (Math.floor(Math.random() * 10)) + 1; を変数に入れて、テキストボックスに出力してみると、なんと小数点が出てしまいます! しかも、27.5や59.5などと、ちょうど0.5が出てしまいます。 この0.5を出さないように、ランダムで数字を出したいのですが、Math.floor以外で使えるものがあったら教えてください。 よろしくお願いします。

  • ActionScript 初心者です。Math.floorについて

    すみませんが教えて下さい。 参考書より 「-10~10までの範囲の整数値」であれば、小数部分を切り捨てるMath.floor()メゾットを使って「Math.floor(Math.random()*21)-10」となります。 Marh.random()が0だと「Math.floor(Math.random()*21)」の部分は「Math.floor(0*21)」となり0になります。 つまり「Math.floor(Math.random()*21)-10」の最小値は-10になります。 Math.random()が約1だと「Math.floor(Math.random()*21)」の部分はMath.floor(1*21)となり、約21(20.99999999・・)の少数部分を切り捨てて20になります。したがって「Math.floor(Math.random()*21)-10」の最大値が10になることが分かります。 とありますが、いろいろ調べても概念がさっぱりわかりません。 詳しい方、噛み砕いて教えて頂けるととてもありがたいです。 こんな質問ですみません。よろしければよろしくお願い致します。

    • ベストアンサー
    • Flash
  • 配列変数に重複のないランダムな数字を入れて行くには?

    JavaScript初心者です。 配列にランダムな数字を入れたいのですが、 aRnd = new Array(); aRnd[0] = Math.floor(Math.random()*100); aRnd[1] = Math.floor(Math.random()*100); aRnd[2] = Math.floor(Math.random()*100); のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか? なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。 よろしくお願いいたします。

  • JavaScriptで数値をimgに設定する

    JavaScriptで 下記のソースにてランダムで出した数値を htmlの width="" height=""に 設定するには どのようにすればよいのでしょうか? <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title></title> </head> <body> <script> var width = Math.floor(Math.random() * 400) + 1; var height = Math.floor(Math.random() * 400) + 1; </script> <img src="hoge.jpg" alt="" width="" height=""> </body> </html>

  • JavaScriptでサイコロのようなものを作成しています。

    JavaScriptでサイコロのようなものを作成しています。 スタートボタンで"数字の画像"(diceX.gif)が順に入れ替わって、ストップボタンで止まる、というものなのですが、 この画像数字の入れ替わる範囲を"1-2の間で、1-3の間で・・・"というように変化させたく思っています。 現状は下記のように別々に並べて画像、スタート.ストップが表示されるよういなっていまが、 これをセレクトメニューで「2」を選択した場合は1-2の、「3」を選択した場合には1-3..の間での変化と 1つの画像、ボタン表示で済むようにしたいのですが、どのように記述すればよいのでしょうか? こういったものを作成するのは初めてで、様々なサイトを参考になんとかここまでこぎ着けましたがどうにも行き詰まってしまいました なにとぞ宜しくお願いいたします。 <SCRIPT LANGUAGE="JavaScript"> <!-- var myImage1 = new Image(); myImage1.src = "dice1.gif"; var myImage2 = new Image(); myImage2.src = "dice2.gif"; var myImage3 = new Image(); myImage3.src = "dice3.gif"; ・ ・ ・ var img =0; fileName = new Array("dice1.gif","dice2.gif","dice3.gif",・・・); function rotate2() { img = Math.floor(Math.random()*2); document.images["dice2"].src = fileName[img]; timer = setTimeout("rotate2()",30); } function stop2() { clearTimeout(timer); } function rotate3() { img = Math.floor(Math.random()*3); document.images["dice3"].src = fileName[img]; timer = setTimeout("rotate3()",30); } function stop3() { clearTimeout(timer); } ・ ・ ・ </SCRIPT> <BODY> <IMG src="dice2.gif" name="dice2"> <FORM action="javascript://"> <INPUT TYPE="submit" VALUE="start" onClick="rotate2()"> <INPUT TYPE="submit" VALUE="stop" onClick="stop2()"> </FORM> <IMG src="dice3.gif" name="dice3"> <FORM action="javascript://"> <INPUT TYPE="submit" VALUE="start" onClick="rotate3()"> <INPUT TYPE="submit" VALUE="stop" onClick="stop3()"> </FORM> ・ ・ ・

  • ランダムな動きのスピード制御(Flash)

    スクリーンに小花をいくつか配置し、それがスクリーン上をゆらゆらと動くムービーを作りたいと思っています。 ランダムな動きの方が面白いので、本を見ながら下記の様なアクションスクリプトを小花の形のMCに書きました。 しかし、移動速度がものすごく速く、チラチラするだけで全然キレイじゃありません(ToT) どう言うスクリプトを書き加えれば、スピード制御できるでしょうか? onClipEvent(enterFrame){ this._x+=Math.floor(Math.random()*101-50); this._y+=Math.floor(Math.random()*101-50); }

  • JavaScriptについて

    本を読みながら勉強しているのですが解説が乗っていなくてわからない部分があるので教えてください <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=yes,initial-scale=1.0,maximum-scale=3.0"> <script src="plugins/plugin-loader.js"></script> <link rel="stylesheet" href="plugins/plugin-loader.css"> </head> <body> <canvas id="canvas" width="300" height="300"></canvas> <script> var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); //ランダムに50個多角形の表示 for (var i = 0; i < 50; i++) { randomDraw(); } //指定範囲のランダムな整数を返す関数 function randomI(nFrom,nTo) { var f = nTo - nFrom + 1; return Math.floor(Math.random() * f) + nFrom; } //ランダムに多角形を描画する関数 function randomDraw() { //パス指定 ctx.beginPath(); //点をランダムに決定 var n = randomI(2,7); ctx.moveTo(randomI(0,canvas.width),randomI(0,canvas.hright)); for (var i = 0; i < n; i++) { ctx.lineTo(randomI(0,canvas.width),randomI(0,canvas.height)); } ctx.closePath(); //描画 ctx.fillStyle = "#" + randomI(0,0xFFFFFF).toString(16); ctx.fill(); } </script> </body> </html> というコードでランダムに50個多角形を描画するというものです function randomI(nFrom,nTo) { var f = nTo - nFrom + 1; return Math.floor(Math.random() * f) + nFrom; ここのrandomIとnToとnFromというのは変数名ですか?これはいったい何者ですか? var n = randomI(2,7); ここの数字を変更すると何かが変わるのですがうまく言葉にできません 何がどう変わるのか教えてください

  • ランダムJavascriptのblank表示

    リンク先のURLをランダムで表示させるため、下記の様に読み込みjavascriptファイルを使用していますが、ターゲットをブランク表示にできません。 windowopenなどと併用する必要があるのか、あまりjavascriptに詳しくないため、 記載箇所を具体的に教えて頂けると嬉しいです。 ■JSファイル側 urls=new Array(); //ランダムで表示したいURLを指定する urls[0]='http://www.・・・'; urls[1]='http://www.・・・; urls[2]='http://www.・・・'; function random() { a=Math.floor(Math.random()*urls.length); location.href=urls[a]; } ■HTMLページ側 <a href="JavaScript:random();">リンクテキスト</a>

  • 0だけは5回中1回表示し、他は条件なしのランダムで

    0~20の数字があります。 1つの数字だけを表示させます。 0以外の全ての数字はランダムに表示します。 0は5回中1回表示させるようにしたいです。 fff(0); function fff(b){ if(b%5 == 0){ a=0; }else{ a = Math.floor(Math.random() * 20) + 1; } alert(a); b++; setTimeout('fff(' + b + ')', 2000); } では1~20までの数字がランダムに表示されますが、 0が表示されるタイミングが決まってしまいます。 もっと上手にするためにはどうしたらよいのでしょうか。

  • ランダムに数字を並び変える方法は

    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までの数字をランダムに並べ替えたいのですがどのような方法がありますか。教えて下さい。 説明が下手でスミマセン。 ご指摘いただければ補足します。

    • ベストアンサー
    • Flash

専門家に質問してみよう