• ベストアンサー

プログラミングに関して全くの初心者です。

プログラミングに関して全くの初心者です。 javascriptでランダムに値を振り分けるときは https://webmanab-html.com/tip/control-random-values/のように Math.randomを使用するのですが、 (1)例えば1、5、9のように均等な間隔のある3つの値を、 (2)9人にランダムに割り当てるけど、結果として1の人、5の人、9の人が3人ずつになるように したいのです。 どのような切り口で調べたらいいかわからないこと、急ぎでスクリプトを準備しなければならないことから質問することにしましたか。 どなたか教えてください。

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

  • ベストアンサー
回答No.4

function* shuffle (ary) {  const   rnd = n => Math.floor (Math.random () * n);    for (let i = ary.length; i--; ) {   let j = rnd (i);   yield ary[j];   ary[j] = ary[i];  } } let G = [1,1,1,5,5,5,9,9,9]; //-- function hokanokansu (x) {  console.log (x); } for (let n of shuffle (G)) {  hokanokansu (n); }

bluechart
質問者

お礼

報告が遅くなってしまいましたが、おかげさまでうまくいきました。何度も丁寧に教えてくれて、さらに私のスクリプトが間違っている理由もいくつかご指摘いただきありがとうございました!

その他の回答 (4)

回答No.5

1.リストをつくった後値を取り出して、 2.ほかの関数の中で使いたいのですが #さんが回答されている部分の let rst = [...shuffle (G)];これが、シャッフルなので、 これを「持っている間(rstの部分)」どこでも好きな場所で、シャッフル済み配列を使えますよ。 >console.logで取り出した値を この命令は、取り出すためのものではなく、 デバッグコンソール画面に表示するための、デバッグ関数です。 (なので、これを行っても行わなくても何も変化はしません) ですので a=50; とか a=[1,2,3,4];とかの配列を作った後 プログラムを終わらせるか、意図的に消すa=nullなど別のを再代入 しない限り、覚えてますよ。

bluechart
質問者

お礼

ここではベストアンサーにはしないのですが、私のスクリプトが間違っている理由をいくつかとりあげてくださりありがとうございました。 励ましのお言葉もありがとうございます!

回答No.3

function* shuffle (ary) {  const   rnd = n => Math.floor (Math.random () * n);    for (let i = ary.length; i--; ) {   let j = rnd (i);   yield ary[j];   ary[j] = ary[i];  } } let G = Array (9); G.fill (1, 0, 3); G.fill (5, 3, 6); G.fill (9, 6, 9); let rst = [...shuffle (G)]; console.log (rst);

bluechart
質問者

お礼

スクリプトをくださりありがとうございます。 この後、console.logで取り出した値を ほかの関数の中で使いたいのですが 教えていただけますか?

回答No.2

1番さんの回答が一番いいだろうな。 配列に 1,1,1,5,5,5,9,9,9 と入れて置き、数字をランダムで入れ替える(シャッフル) そのまま、 配列の先頭=0番から9人に与えて終了。 サンプルはこんなのでいいかな。。 https://javascript.step-learn.com/contents/J061-array-shuffle.html

bluechart
質問者

お礼

ありがとうございます。また、urlもありがとうございます。すみません、 1.リストをつくった後値を取り出して、 2.ほかの関数の中で使いたいのですが 教えていただけますか?

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

それなら、配列を9個作って、その中の値に1,5,9を3つずつ入れて置いて、9個の配列をランダムに並べればいいと思いますよ。

bluechart
質問者

お礼

なるほど、用語をよく知らなかったのでスッキリまとめてくださりありがとうございます。

関連するQ&A

  • ある値に対して違う値を返させるには?

    はじめまして。JavaScript初心者のものです。 ただ今、大学のJavaScriptの授業で自由課題に取り組んでいるのですが、 初歩的なところで詰まっています。 タイトルでは少し分かりづらいので、コードを提示して説明いたします。 <SCRIPT language="JavaScript"> <!-- seikaiA = Math.ceil( Math.random() * 4 ); if( seikaiA == 0 ) seikaiA = 1; seikaiB = Math.ceil( Math.random() * 4 ); if( seikaiB == 0 ) seikaiB = 1; if( seikaiB == seikaiA ) seikaiB = ●●●; document.write( '<Table border=1>' ); document.write( '<TR><TD>'+seikaiA+'</TD><TD>'+seikaiB+'</TD></TR>' ); --> </SCRIPT> これは、1~4までの数字からひとつ、整数でランダムに取り出し、 「seikaiA」および「seikaiB」に代入しているところです。 ところがこのままでは「seikaiA」の値と「seikaiB」の値が同じになるケースが当然生じます。 私は両者の値を互いに異なる値として出力したいので、 if文にて、同じになった場合再びseikaiBを選び直すように命令したいのですが、 うまくいきません。 ●●●と書かれた部分がそうです。 どのようにプログラミングすれば、「seikaiA」と「seikaiB」の値を常に異なるものとして出力することが出来るのでしょうか? 初歩的なことを質問して申し訳ないのですが、よろしくおねがいします。

  • 現在、flashlite1.1において、画像がランダム表示される携帯用

    現在、flashlite1.1において、画像がランダム表示される携帯用待受けFLASHを作成しています。 一番簡単なスクリプトとして以下の形式でスクリプトを記載したのですが、 同じ画像が連続して表示されることを防ぐにはどうしたらよろしいでしょうか。。 r=random(n)+3; gotoAndStop(r); また、math.randomを使用するのと上記とでは、 どのような違いがあるのでしょうか? ご教示いただけると幸いです。 よろしくお願いします。

  • プログラミングの課題が出たのですが、全く分からなくて手のつけようがあり

    プログラミングの課題が出たのですが、全く分からなくて手のつけようがありません。 どなたか教えて頂けませんか? 以下問題のその課題です。 以下の問題に対応するJavascriptのプログラムを作成して、システムにアップロードしてください。 標準問題 1.円の面積 (1) prompt を用いて数値を入力し、alert を用いてその数値を半径とする 円の面積を表示するプログラムを作成せよ。 なお、円周率は Math.PI で得られる。(例えば、2πは 2 * Math.PI;) 2.繰り返し promptを用いて100以下の数値を入力し、1から順に整数をdocument.writelnなどで表示せよ。ただし、3の倍数と3のつく整数の場合に、文字が大きく表示(サイズ7など)されるように工夫せよ。 3.乱数 1 から 100 までの値(整数)を乱数で決定し、その値を document.write を用いて表示するプログラムを作成せよ。 なお、0以上、1未満の乱数は Math.random()、ある数 n の小数点を切り上げた整数は Math.ceil(n) で得られる。 4.数当てゲーム 1 から 100 までの値(整数)を乱数で決定し、その値を正解するまで prompt による数値の入力を繰り返すゲームを作成せよ。 入力した値が正解より大きい場合は「もっと小さい」、 正解より小さい場合は「もっと大きい」、 正解した場合は「正解です」と、それぞれ alert を用いて表示せよ。 当然、正解は表示してはいけない。

  • 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>

  • テーブルとテーブルの間の隙間

    以下の様なHTMLでIE6で表示した場合、●Aと●Bの間に、微妙な隙間が入ってしまいます。 どうやっても隙間が無くなりません。 ●Aの部分には、画像がランダムに表示されるようなスクリプトを記述していますが、 そのスクリプトを削除したら、ちゃんと隙間が無くなるのです(^^;) これって方法はありますか?どうにかランダムに表示させたいので、アドバイス下さい。 ============================ <script language="javascript" src="../js/top.js"></script> </HEAD> <BODY topmargin="0"> <DIV align="center"> <TABLE border="0" cellspacing="0" cellpadding="0"> <TBODY> ●A <TR> <TD width="800"><SCRIPT LANGUAGE="JavaScript">random_img2()</SCRIPT> <noscript><IMG src="../img/1.jpg" alt="" width="800" height="300"></noscript></TD> </TR> ●B <TR> <TD width="800"><A href="../index.html">HOME</A> &gt;&gt; TEST</TD> </TR> </TBODY> </TABLE> ============================ ※実際のHTMLには●Aと●Bという文字は入っておりません。 以下はtop.jsで記述している内容です。 ============================ function random_img1(num1,num2) { if((num1 - num2) > 0) { var big = num1 var small = num2 } else { var big = num2 var small = num1 } var range = big - small + 1 var number = Math.floor(Math.random()*range) + small return(number) } function random_img2() { var img_src = "../img/" + random_img1(1,3) + ".jpg" document.write("<IMG SRC='" + img_src + "'>") } ============================

    • ベストアンサー
    • HTML
  • ランダム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>

  • 別ウィンドウでリンクを開かせたい

    ランダム画像の個々のリンクを別ウィンドウに指定したいのですが、どうすれば良いでしょうか>< <script language="JavaScript"> <!-- function random_imglink(){ var myimages=new Array() //specify random images below. You can have as many as you wish myimages[1]="img/header/273_120_moncler.jpg" myimages[2]="img/header/273_120_duvetica.jpg" //specify corresponding links below var imagelinks=new Array() imagelinks[1]="http://item.rakuten.co.jp/carocaro/c/0000000345/" imagelinks[2]="http://item.rakuten.co.jp/carocaro/c/0000001048/" var ry=Math.floor(Math.random()*myimages.length) if (ry==0) ry=1 document.write('<a href='+'"'+imagelinks[ry]+'"'+'><img src="'+myimages[ry]+'" border=0></a>') } random_imglink() //--> </script>

  • 画像からランダムリンク

    Javascriptでランダムリンクをする場合、 <form> <input type=button onClick="jump()" value="ランダム"> </form> <script> url = new Array(); url[0] = "00.html"; url[1] = "01.html"; url[2] = "02.html"; function jump() { p = Math.round(Math.random() * (url.length - 1)); parent.top.document.location = url[p]; } </script> という記述を使うのは知っているんですが、 「ランダムリンク」というボタンではなく、 画像をクリックしてランダムリンクさせることは可能でしょうか? Javascriptでは無理な場合、 画像からランダムリンクを張る方法はありますか? CGI等でも構いませんので、お勧めがあれば教えてください。

  • リンクのクリック数を把握したい

    現在、以下のようなjavascriptを書いて、リンクを作っています。 <script type="text/javascript"> <!-- A01=new Array(); A01[0]='<a href="http://www.yahoo.co.jp/" target="blank">yahoo</a>'; A01[1]='<a href="http://www.google.co.jp/" target="blank">google</a>'; a01=Math.floor(Math.random()*A01.length); B01=new Array(); B01[0]='<a href="http://www.livedoor.co.jp/" target="blank">livedoor</a>'; B01[1]='<a href="http://www.goo.co.jp/" target="blank">goo</a>'; b01=Math.floor(Math.random()*B01.length); --> </script> とgoogleとyahoo、;livedoorとgooを配列に入れておき、 どちらかがランダムで出てくるようにして実際の表示部に以下を配置しています。 <script type="text/javascript"> <!-- document.write(A01[a01]); --> </script> <script type="text/javascript"> <!-- document.write(B01[b01]); --> </script> このスクリプトで、A01(yahoo or google)とB01 (livedoor or goo)が それぞれ何回クリックされたのかを把握したいです。 どのようにすれば良いか、ご教示頂けると幸いです。

  • 画像リンクをランダムに4つ表示する

    このようなタグを使って、画像リンクのランダム表示を作成しました。 ((hard内)) <script type="text/javascript"><!-- // var imglist = [ [ "画像1", "", "リンク先1" ] , [ "画像2", "", "リンク先2" ] ]; function RandomImageLink() { // var selectnum = Math.floor(Math.random() * imglist.length); // var output = '<a href="' + imglist[selectnum][2] + '">' + '<img src="' + imglist[selectnum][0] + '"' + ' alt="' + imglist[selectnum][1] + '"><br>' + imglist[selectnum][1] + '</a>'; // document.write(output); } // --></script> ((body内)) <script type="text/javascript"><!-- RandomImageLink(); // --></script> こうしてランダムに表示できるようになったのですが、私は『ランダムに1つ表示』ではなく、『ランダムに4つ表示』にしたいのです。 …どうすればいいのでしょうか? どなたか回答をお願いします。